[轉]sqlserver判斷字符串是不是數字

sql2005有個函數ISNUMERIC(expression)函數:當expression爲數字時,返回1,不然返回0。這只是一個菜鳥級的解決辦法,大多數狀況比較奏效。sql

eg:express

select ISNUMERIC('123') --結果爲1

可是,該函數有個缺點!函數

eg:設計

SELECT 
 ,ISNUMERIC('-') as '-'    --1
 ,ISNUMERIC('+') as '+'    --1
 ,ISNUMERIC('$') as '$'    --1
 ,ISNUMERIC('.') as '.'    --1
 ,ISNUMERIC(',') as ','    --1
 ,ISNUMERIC('\') as '\'    --1
 ,ISNUMERIC('2D3') AS '2D3'--1
,ISNUMERIC('1d1') AS '1d1'--1
,ISNUMERIC('1e1') AS '1e1'--1
,ISNUMERIC('d') AS 'd'   --0

當含有美圓符、加減號、逗號等符號時,或者D、E的先後均出現數字時,也會返回1,這就比較頭疼了。標點符號卻是好理解,爲何d,e這種狀況,真是不理解微軟設計的意圖。code

有什麼好的解決辦法嗎?固然了,請看下面blog

方法:通配符。高逼格使用。io

適用場景:2005及以上(2005以前的版本沒試過,應該也支持)class

--返回0-則爲純數字(支持正負數,小數點)
 SELECT PATINDEX('%[^0-9|.|-|+]%','2.2')--返回0

 --返回0-則爲純整數
select PATINDEX('%[^0-9]%', '2.2')--返回非0
相關文章
相關標籤/搜索