【发布时间】:2011-09-27 10:41:24
【问题描述】:
保留列是一个 varchar,要对其进行求和,我想将其转换为十进制。 但是下面的 SQL 给了我一个错误
select
cast(Reserve as decimal)
from MyReserves
将数据类型 varchar 转换为数值时出错。
我添加了 isumeric 而不是 null 以尝试避免此错误,但它仍然存在,有什么想法吗?
select
cast(Reserve as decimal)
from MyReserves
where isnumeric(Reserve ) = 1
and MyReserves is not null
【问题讨论】:
-
你能在 Reserve 列显示一些数据吗?
-
您必须小心使用 isnumeric,因为它可能返回不正确的结果。这来自文档 **ISNUMERIC 对于某些不是数字的字符(例如加号 (+)、减号 (-))和有效的货币符号(例如美元符号 ($))返回 1。 ** 看看stackoverflow.com/questions/312054/…
-
@astander - 它不会返回不正确的结果。只是大多数人不理解它回答了一个没人真正想问的问题(“这个字符串会转换为至少一种数字类型吗?”)
-
您似乎假设
cast将在where之后发生。无论isnumeric的限制如何,在任何情况下都绝对不能保证这一点 -
@MartinSmith - 我认为你应该添加这个作为答案
标签: sql sql-server