将数据类型varchar转换为float时出错isnumeric = 1

时间:2017-01-13 11:11:40

标签: sql sql-server sql-server-2008

当我运行脚本时:

select 
    cast(s as float)
from 
    t
where 
    ISNUMERIC(s) = 1

它因错误而停止:

  

将数据类型varchar转换为float时出错。

为什么会这样?我试图转换为只浮数数字。我如何找出导致错误的行?

3 个答案:

答案 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]%'

这将返回存在非数字字符的任何行,甚至是.的值。