2011-09-13 235 views
11

最近我在SQL Server中使用ISNUMERIC,当时我遇到了一个问题,导致查找这段代码。为什么ISNUMERIC('。')返回1?

SELECT ISNUMERIC('.') 

这返回1,因为在真的,不应该这样返回0,因为在假?

+0

都能跟得上。 1.1是数字。 ISNUMERIC())是非常基本的,甚至可能会说愚蠢的...因此它考虑了一段时间的数字。 –

+2

','也可以(很多地区使用它作为小数分频器) – Unsliced

回答

16

请参阅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(' ')返回0,尽管成功地转换为int和money。相反ISNUMERIC(N'8')返回1,但不会成功投到我尝试过的任何东西。

一些有用的帮手功能在这里IsNumeric, IsInt, IsNumber

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

+3

。考虑一下滑坡:'10'可以,'10.0'可以,'10.'可以......(_开始slide_)所以'.1'应该是可以的......并且'.0'和..是的'.'也可以。 [慷慨输入解析](https://plus.google.com/114034641416688387662/posts/8bJZnLFxAfi)有时会有缺点。 – sehe

+0

谢谢你,在Denali上推出! –

1

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

看到here

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

答:因为“ - ”的意思是否定的,所以“。”用于小数点 的数字。我不知道他们为什么把它命名为ISNUMERIC。他们 应该命名它,ISNUMBERRELATED。