SqlServer数字类型校验的使用
来源:未知 责任编辑:责任编辑 发表时间:2013-12-22 14:56 点击:次
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 www.2cto.com
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
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>