为什么ISNUMERIC('。')返回1?

时间:2011-09-13 10:25:35

标签: sql sql-server

最近我在SQL Server中使用ISNUMERIC,当我遇到问题时,导致找到这段代码。

SELECT ISNUMERIC('.')

这返回1,如同在true中一样,不应该返回0,如在false中那样?

3 个答案:

答案 0 :(得分:18)

请参阅IsNumeric() Broken? Only up to a point

SELECT CAST('.' AS MONEY) 

返回0.00(虽然intfloat的投射失败了)

ISNUMERIC只检查该值是否可以强制转换为通常无用的任何一种数值数据类型。通常您想知道它是否可以转换为特定类型。

Additionally it doesn't even seem to do that task correctly for all possible inputs.ISNUMERIC(' ')尽管成功投入了int和money,但仍返回0。相反,ISNUMERIC(N'8')会返回1,但不能成功投射到我尝试过的任何内容。

这里有一些有用的辅助函数IsNumeric, IsInt, IsNumber

SQL Server 2012引入了TRY_PARSETRY_CONVERT,对此有很大帮助。

答案 1 :(得分:1)

因为“。”用十进制数字!

请参阅here

  

' - '& ''为什么是数字(' - ')& isnumeric('。')返回   1?

     

答案:因为“ - ”表示否定和“。”用十进制表示   数。我不知道为什么他们将它命名为ISNUMERIC。他们   应该命名为ISNUMBERRELATED。

答案 2 :(得分:0)

我认为它还将许多其他非数字字段解释为数字,这里有更多信息 -

http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html