标签:patindex 数字 -- sqlserver 是否是 isnumeric 字符串 expression
有的时候我们可能会需要去判断数据库中一个字符串类型的字段是否是存的纯数字,通常来说解决思路是先去找数据库引擎提供的内置函数是否有能够满足需求的,没有再另觅他法。
在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的时候,就能知道字符串不是纯数字了。
"那一天我二十一岁,在我一生的黄金时代,我有好多奢望:我想爱,想吃,还想在一瞬间变成天上半明半暗的云。后来我才知道,生活就是个缓慢受锤的过程:人一天天老下去,奢望也一天天消失。"
标签:patindex,数字,--,sqlserver,是否是,isnumeric,字符串,expression 来源: https://www.cnblogs.com/yanggb/p/15753761.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。