标签:PATINDEX 判断 IsNum 数值 set ResultNum SQL ISNUMERIC SELECT
sql2005版本有个函数ISNUMERIC(expression)函数:当expression为数字时,返回1,否则返回0。
select ISNUMERIC('123') --结果为1
但是,该函数有个缺点!
1 SELECT 2 ,ISNUMERIC('-') as '-' --1 3 ,ISNUMERIC('+') as '+' --1 4 ,ISNUMERIC('$') as '$' --1 5 ,ISNUMERIC('.') as '.' --1 6 ,ISNUMERIC(',') as ',' --1 7 ,ISNUMERIC('\') as '\' --1 8 ,ISNUMERIC('2D3') AS '2D3'--1 9 ,ISNUMERIC('1d1') AS '1d1'--1 10 ,ISNUMERIC('1e1') AS '1e1'--1 11 ,ISNUMERIC('d') AS 'd' --0
当含有美元符、加减号、逗号等符号时,或者D、E的前后均出现数字时,也会返回1,这就比较头疼了。标点符号倒是好理解,为什么d,e这种情况 不要问我为什么,因为微软的厂长是我表哥。
另外一个函数
PATINDEX
适用场景:2005及以上(2005之前的版本没试过,应该也支持)
SELECT PATINDEX('%[^0-9|.|-|+]%','2.2')--返回0 【带小数点与正负极】
但又有一个漏洞
SELECT PATINDEX('%[^0-9|.|-|+]%','2.2.2') --返回0
苍天啊大地啊,以不能偷懒了。结合二个函数写一个数字验证函数算了。
1 -- ============================================= 2 -- Author: <LYZ> 3 -- Create date: <2019-11-07> 4 -- Description: <判断是否为数值类型> 5 -- ============================================= 6 Create function [dbo].[fn_GetIsNumeric](@Str nvarchar(50)) 7 Returns bit 8 As 9 begin 10 Declare @IsNum int,@ResultNum bit 11 set @ResultNum=0 12 set @IsNum=0 13 --首先看是否为数值类型 14 set @IsNum=(SELECT ISNUMERIC(@Str)) --为1时为数值类,为0时非法类 15 16 if @IsNum=1 17 begin 18 set @IsNum=(SELECT PATINDEX('%[^0-9|.]%',@Str)) --为1时非法数字,为0时为数量 19 if @IsNum=0 20 set @IsNum=2 21 else 22 set @IsNum=0 23 end 24 25 26 if @IsNum>0 27 set @ResultNum=1 28 return @ResultNum 29 end 30 GO
标签:PATINDEX,判断,IsNum,数值,set,ResultNum,SQL,ISNUMERIC,SELECT 来源: https://www.cnblogs.com/approx/p/11812073.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。