SQL判断是否为数值类型
作者:互联网
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