sqlserver判断字符串是否是纯数字
有的时候我们可能会需要去判断数据库中⼀个字符串类型的字段是否是存的纯数字,通常来说解决思路是先去数据库引擎提供的内置函数是否有能够满⾜需求的,没有再另觅他法。
在sqlserver引擎中,⾃sqlserver2005起提供了⼀个isnumeric(expression)函数⽤于判断字符串是否为纯数字:当expression为数字时,返回1,否则返回0。
但是实际使⽤上却会存在偏差:
select isnumeric('123.456') as'123.456'-- 1
, isnumeric('-') as'-'-- 1
, isnumeric('+') as'+'-- 1
, isnumeric('$') as'$'-- 1
, isnumeric('.') as'.'-- 1
, isnumeric(',') as','-- 1
, isnumeric('\') as'\'-- 1
, isnumeric('1D1') AS'1D1'-- 1
, isnumeric('1E1') AS'1E1'-- 1
, isnumeric('1d1') AS'1d1'-- 1
, isnumeric('1e1') AS'1e1'-- 1
, isnumeric('d') AS'd'-- 0
字符串是什么类型的, isnumeric('e') AS'e'-- 0
具体是,当字符串中含有美元符、加减号、逗号等符号时,或者在D、E的前后均出现数字时,也会返回1,⽽微软这样设计的原因成谜。
因此我们只能另觅他法,推荐使⽤patindex( '%pattern%', expression)检索函数配合正则表达式做判断:
select patindex('%[^0-9|.|-]%', '-1232.456'); -- 0
select patindex('%[^0-9|.|-]%', 'yanggb666'); -- 1
这样,当判断的结果为0的时候,字符串就是纯数字,可以⽤强制类型转换为数字类型;当判断结果不为0的时候,就能知道字符串不是纯数字了。
"那⼀天我⼆⼗⼀岁,在我⼀⽣的黄⾦时代,我有好多奢望:我想爱,想吃,还想在⼀瞬间变成天上半明半暗的云。后来我才知道,⽣活就是个缓慢受锤的过程:⼈⼀天天⽼下去,奢望也⼀天天消失。"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论