最近我在SQL Server中使用ISNUMERIC,当我遇到问题时,导致找到这段代码。
SELECT ISNUMERIC('.')
这返回1,如同在true中一样,不应该返回0,如在false中那样?
答案 0 :(得分:18)
请参阅IsNumeric() Broken? Only up to a point。
SELECT CAST('.' AS MONEY)
返回0.00
(虽然int
和float
的投射失败了)
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_PARSE
和TRY_CONVERT
,对此有很大帮助。
答案 1 :(得分:1)
因为“。”用十进制数字!
请参阅here
' - '& ''为什么是数字(' - ')& isnumeric('。')返回 1?
答案:因为“ - ”表示否定和“。”用十进制表示 数。我不知道为什么他们将它命名为ISNUMERIC。他们 应该命名为ISNUMBERRELATED。
答案 2 :(得分:0)
我认为它还将许多其他非数字字段解释为数字,这里有更多信息 -
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html