SqlServer数字类型校验的使用
2730 点击·0 回帖
![]() | ![]() | |
![]() | SqlServer ISNUMERIC 校验时认为科学计数法、货币符号均为合法,如果此类数据不加转换 直接插入数据库的float、decimal等字段中是会出异常。以下函数可用于校验字符串是否为数 字类型,仅允许输入+、-、0-9、.字符,包含最大值校验 --参数1:类型varchar 被校验字符串 --参数2:类型int 整数位数长度 --参数3:类型int 小数位数长度,若为负数既不校验小数位数长度 --返回值:类型int 返回"1"既检验正确,"0"既检验不通过(不是有效的数字类型或不符合规定的长度规范 ) if object_id('IS_NUMBER_NEW') is not null drop FUNCTION [dbo].[IS_NUMBER_NEW] ALTER FUNCTION [dbo].[IS_NUMBER_NEW] (@strVar VARCHAR(100), @i INT, @j INT) RETURNS INT AS BEGIN IF (ISNUMERIC(@strVar) = 0)--系统函数过滤绝大部分异常数据,但对于科学计数法等无法过滤 RETURN 0 ELSE BEGIN IF (@j = 0) BEGIN IF (PATINDEX('%[^0-9|+|-]%',@strVar) > 0) --整数校验,只允许+、-、数字字符 RETURN 0 END ELSE BEGIN IF (PATINDEX('%[^0-9|.|+|-]%',@strVar) > 0) --带小数校验 RETURN 0 END SET @strVar = REPLACE(REPLACE(@strVar,'-',''),'+','') --最大值校验 IF (CHARINDEX('.',@strVar) = 0) BEGIN IF (LEN(@strVar) > @i) RETURN 0 END ELSE BEGIN IF ((CHARINDEX('.',@strVar) - 1) > @i) RETURN 0 ELSE IF (@j >= 0) BEGIN IF (@j - DATALENGTH(SUBSTRING(@strVar,CHARINDEX('.',@strVar) + 1,99)) < 0) RETURN 0 END END END RETURN 1 END | |
![]() | ![]() |