在案例中需要测试ISNUMERIC的语法帮助

时间:2010-07-06 13:49:12

标签: sql case isnumeric

我试图阻止在任何范围内处理负值的输入,而如果它们是负数,则它们应该下降到第一个案例语句的末尾为“无效”。这不起作用,因为当我对(-1000)的输入运行测试时,我得到< = 50K的行。我担心我的语法错了,但不知道为什么。

ALTER FUNCTION [dbo].[FN_1ST_UPB_Bands]
(
    @FN_1ST_UPB_Band            int
     )

RETURNS varchar(16)
AS
BEGIN

declare @Return varchar (16)

select @Return =

        Case
           When ISNUMERIC(@FN_1ST_UPB_Band)= 1 then  

        case 
            When @FN_1ST_UPB_Band is NULL then  '    Missing'
            When @FN_1ST_UPB_Band = 0 then '  0'
            When @FN_1ST_UPB_Band < = 50000 then ' <=50K'
            When @FN_1ST_UPB_Band between 50000 and 100000 then ' 50-100'
            When @FN_1ST_UPB_Band between 100000 and 150000 then '100-150'
            When @FN_1ST_UPB_Band between 150000 and 200000 then '150-200'
            When @FN_1ST_UPB_Band between 200000 and 250000 then '200-250'
            When @FN_1ST_UPB_Band between 250000 and 300000 then '250-300'
            When @FN_1ST_UPB_Band between 300000 and 350000 then '300-350'
            When @FN_1ST_UPB_Band between 350000 and 400000 then '350-400'
            When @FN_1ST_UPB_Band between 400000 and 450000 then '400-450'
            When @FN_1ST_UPB_Band between 450000 and 500000 then '450-500'
            When @FN_1ST_UPB_Band > 500000 then '500K+'
            else null End
         else 'Invalid' End

    RETURN @return
End

4 个答案:

答案 0 :(得分:2)

ISNUMERICINT字段上始终为true,您可以安全地将其丢弃。

试试这个:

declare @FN_1ST_UPB_Band INT
SET  @FN_1ST_UPB_Band = -1000

select  case 
            When @FN_1ST_UPB_Band is NULL then  '    Missing'
            When @FN_1ST_UPB_Band < 0 Then 'Invalid'
            When @FN_1ST_UPB_Band = 0 then '  0'
            When @FN_1ST_UPB_Band < = 50000 then ' <=50K'
            When @FN_1ST_UPB_Band between 50000 and 100000 then ' 50-100'
            When @FN_1ST_UPB_Band between 100000 and 150000 then '100-150'
            When @FN_1ST_UPB_Band between 150000 and 200000 then '150-200'
            When @FN_1ST_UPB_Band between 200000 and 250000 then '200-250'
            When @FN_1ST_UPB_Band between 250000 and 300000 then '250-300'
            When @FN_1ST_UPB_Band between 300000 and 350000 then '300-350'
            When @FN_1ST_UPB_Band between 350000 and 400000 then '350-400'
            When @FN_1ST_UPB_Band between 400000 and 450000 then '400-450'
            When @FN_1ST_UPB_Band between 450000 and 500000 then '450-500'
            When @FN_1ST_UPB_Band > 500000 then '500K+'
            else null
        End

答案 1 :(得分:0)

在那种情况下(没有双关语)

这样做

When @FN_1ST_UPB_Band < 0 Then 'Invalid'
When @FN_1ST_UPB_Band >= 0 and @FN_1ST_UPB_Band < = 50000 then ' <=50K'

因为-1000小于50000

答案 2 :(得分:0)

因为它们是按顺序计算的,所以-1000是&lt; = 50000,所以它的计算结果为true并返回“&lt; = 50000”。您需要between 1 and 49999代替(不是50000,因为50000会在2种情况下评估为真)。

答案 3 :(得分:0)

好不是-1000还不到50000?你不需要那个案子:

当@ FN_1ST_UPB_B介于0和49999之间时,'&lt; = 50K'