假设以下数据:
Column1 (data type: varchar(50)) -------- 11.6 -1 1,000 10" Non-Numeric String
我有一个查询,它从此列中提取数据,并希望确定该值是否为数字,然后在我的查询中将其返回.所以我正在做以下事情
SELECT CASE WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN Replace(Column1, '"', '') ELSE 0 END AS NumericValue
SQL正在报告:
将varchar值'11 .6'转换为数据类型int时转换失败.
为什么?我也试图强迫这个:
SELECT CASE WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN cast(Replace(Column1, '"', '') AS float) ELSE 0 END AS NumericValue
我得到了:
将数据类型varchar转换为float时出错.
Quassnoi.. 11
您需要用句点替换逗号:
CAST(REPLACE(column, ',', '.') AS FLOAT)
SQL Server
输出使用locale定义的小数分隔符,但不会将CAST
s中的句点除以数字类型之外的任何内容.
您需要用句点替换逗号:
CAST(REPLACE(column, ',', '.') AS FLOAT)
SQL Server
输出使用locale定义的小数分隔符,但不会将CAST
s中的句点除以数字类型之外的任何内容.
首先将字符串转换为money,然后将其转换为任何其他数字格式,因为money类型始终提供真正的数字字符串.那你永远不会看到错误.
在您的查询中尝试以下内容,您就会知道我在说什么.两者都将返回2345.5656.Money数据类型舍入到4个小数位,因此转换会导致舍入到4个小数位.
SELECT CAST('2,345.56556' as money), CAST('$2,345.56556' as money)
施放(施放('2,344'作为钱)作为浮动)将完美地工作或施放(施放('2,344'作为金钱)作为小数(7,2))也将起作用.
甚至施放(CAST('$ 2,345.56556'作为货币)作为int)将完美地将其四舍五入到最接近的整数.