【问题标题】:Need help with syntax for test ISNUMERIC in case需要有关测试 ISNUMERIC 语法的帮助,以防万一
【发布时间】:2010-07-06 13:49:11
【问题描述】:

我正在尝试停止输入负值以在任何范围内处理,而不是如果它们是负数,它们应该下降到第一个 case 语句的末尾作为“无效”。这不起作用,因为当我对 (-1000) 的输入运行测试时,我得到一行

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

【问题讨论】:

    标签: sql case isnumeric


    【解决方案1】:

    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
    

    【讨论】:

    • 嗨 Leslie,不,它必须根据请求者输出为 '
    • Quassnoi,很抱歉,Leslie 最初发表了类似回复的评论。这就是我最初回复的内容。请接受我的道歉。老板希望同一个桶中的负数为零,因此我使用了语句When @FN_1st_UPB_BAND
    【解决方案2】:

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

    这样做

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

    因为-1000小于50000

    【讨论】:

      【解决方案3】:

      因为它们是按顺序计算的,-1000 是 between 1 and 49999 代替(不是 50000,因为您有 50000 会在 2 种情况下评估为真)。

      【讨论】:

        【解决方案4】:

        那么 -1000 不是小于 50000 吗?你不需要这样的情况吗:

        当@FN_1ST_UPB_Band 在 0 到 49999 之间时,'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          • 2016-01-21
          • 2011-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多