最近我在SQL Server中使用ISNUMERIC,当时我遇到了一个问题,导致查找这段代码。为什么ISNUMERIC('。')返回1?
SELECT ISNUMERIC('.')
这返回1,因为在真的,不应该这样返回0,因为在假?
最近我在SQL Server中使用ISNUMERIC,当时我遇到了一个问题,导致查找这段代码。为什么ISNUMERIC('。')返回1?
SELECT ISNUMERIC('.')
这返回1,因为在真的,不应该这样返回0,因为在假?
请参阅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(' ')
返回0
,尽管成功地转换为int和money。相反ISNUMERIC(N'8')
返回1
,但不会成功投到我尝试过的任何东西。
一些有用的帮手功能在这里IsNumeric, IsInt, IsNumber。
SQL Server 2012引入了TRY_PARSE
和TRY_CONVERT
这对此有很大的帮助。
。考虑一下滑坡:'10'可以,'10.0'可以,'10.'可以......(_开始slide_)所以'.1'应该是可以的......并且'.0'和..是的'.'也可以。 [慷慨输入解析](https://plus.google.com/114034641416688387662/posts/8bJZnLFxAfi)有时会有缺点。 – sehe
谢谢你,在Denali上推出! –
因为“。”用于十进制数字!
看到here
为ISNUMERIC ' - ' & ''为什么是数字(' - ')& isnumeric('。')返回 1?
答:因为“ - ”的意思是否定的,所以“。”用于小数点 的数字。我不知道他们为什么把它命名为ISNUMERIC。他们 应该命名它,ISNUMBERRELATED。
我想这也解释了一些其他非数字字段作为数字,这里有进一步的信息 -
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
都能跟得上。 1.1是数字。 ISNUMERIC())是非常基本的,甚至可能会说愚蠢的...因此它考虑了一段时间的数字。 –
','也可以(很多地区使用它作为小数分频器) – Unsliced