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
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • sql常见面试题
  • SQL SERVER 2005性能之跟踪
  • SQL编程(一)
  • LINUX上RMAN自动备份脚本
  • sql server面试题
  • 如何将多个SQL查询统计结果一次显示出来
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
  • sql server 列转行
  • SQL小技巧系列 --- 行转列合并
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1