sql2005有个函数ISNUMERIC(expression)函数:当expression为数字时,返回1,不然返回0。这只是一个菜鸟级的解决办法,大多数状况比较奏效。sql
eg:express
select ISNUMERIC('123') --结果为1
可是,该函数有个缺点!函数
eg:spa
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
适用场景:2005及以上(2005以前的版本没试过,应该也支持)io
--返回0-则为纯数字(支持正负数,小数点) SELECT PATINDEX('%[^0-9|.|-|+]%','2.2')--返回0 --返回0-则为纯整数 select PATINDEX('%[^0-9]%', '2.2')--返回非0