检查位数

时间:2013-10-07 19:59:34

标签: sql sql-server sql-server-2008

我有以下功能,应该检查数字是4位数。

   function f_checkNum(
       @pnum integer
    ) returns integer
    begin      
       return case
                when @pnum like '[0-9][0-9][0-9][0-9]' then 1       
                else 0
             end;      
    end

如果输入的数字低于4位数,但如果它们超过4则会产生错误

,这样可以正常工作
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.

请告诉我如何修复它。谢谢

3 个答案:

答案 0 :(得分:2)

Return CASE WHEN @pnum between 1000 and 9999 Then 1 Else 0 End

如果您需要包含负数,那么

Return CASE WHEN ABS(@pnum) between 1000 and 9999 Then 1 Else 0 End

答案 1 :(得分:0)

尝试这样的事情:

return case
    when LEN(cast(@pnum as varchar)) = 4 then 1
    else 0
    end;    

答案 2 :(得分:0)

您可以改用该功能。这将检查您的号码长度,并同时满足负数。

create function f_checkNum(
   @pnum integer
) returns integer
begin  
return case when len(cast(@pnum as varchar(max))) = 4 and @pnum > 0
    then 1
    else 0
    end
end