0

我有以下功能,它应该检查数字是否为 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.

请让我知道如何解决它。谢谢

4

3 回答 3

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
于 2013-10-07T20:30:04.330 回答
0

尝试这样的事情:

return case
    when LEN(cast(@pnum as varchar)) = 4 then 1
    else 0
    end;    
于 2013-10-07T20:09:28.977 回答
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
于 2013-10-07T20:20:15.853 回答