当我运行脚本时:
select
cast(s as float)
from
t
where
ISNUMERIC(s) = 1
它因错误而停止:
将数据类型varchar转换为float时出错。
为什么会这样?我试图转换为只浮数数字。我如何找出导致错误的行?
答案 0 :(得分:6)
isnumeric函数认为几乎所有东西都是数字。使用" try_convert"代替。如果值无法转换为目标数据类型,则返回null。
select convert(float, '1,0,1')
where try_convert(float, '1,0,1') is not null
如果您使用的是旧版本的SQL,我会编写自己的函数。
答案 1 :(得分:2)
当您尝试转换为float的列中的值包含逗号(,)为千位分隔符时,我通常会面对此:
SELECT ISNUMERIC('140,523.86')
结果为1,但无法将其转换为浮点数。 通过替换它对我来说很好:
SELECT
CAST( replace(s,',','') AS float ) AS Result
FROM t
WHERE ISNUMERIC(replace(s,',','')) = 1
答案 2 :(得分:1)
ISNUMERIC()
等值, 1
函数会返回123e3
,因为这些值会被解释为数值。因为sql server将其视为123 , 3 to the powers of 10
,这实际上是一个数值。
你应该尝试类似......
Select *
From tableName
WHERE Col NOT LIKE '%[^0-9]%'
这将返回存在非数字字符的任何行,甚至是.
的值。