2011-09-13 502 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。