【问题标题】:oracle if 0, like if null (nvl)oracle if 0, like if null (nvl)
【发布时间】:2011-06-01 17:05:38
【问题描述】:

oracle 有一个很好的内置函数来执行 if null,但是我想执行 if = 0;有没有简单的方法来做到这一点?

nvl(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),''), 长度(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5)))))

这将作为 substr 函数的参数。

如果instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' ')!= 0,那么我想要那个值,否则我想要length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5)) 的值

有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    你可以使用NVL(NULLIF(A,'0'), B)

    【讨论】:

      【解决方案2】:

      由于原始帖子中的多余措辞,我发现这两个答案都难以阅读。总结康拉德和克雷格的答案:

      要复制 nvl(A,B) 但为 0 而不是 null,您可以这样做:

      WHEN A != 0 THEN
        A
      ELSE
        B
      END
      

      或 Craig 的更紧凑(但其他人更难阅读):

      NVL(NULLIF(A,0),B)
      

      我认为以下方法也可以:

      DECODE(A,0,B,A)
      

      【讨论】:

        【解决方案3】:

        我认为你需要使用CASE

        例如

        WHEN instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' ') != 0 THEN
          length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5))
        ELSE
           Some Default
        END as foo
        

        【讨论】:

        • 子字符串调用内部?
        • case when instr(ovrflo_adrs_info,'bld') > 0 then substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld')+5, case when instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld')+5),' ') != 0 instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld')+5),' ') else length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld')+5)))) end) else null end as BLDG_NM,
        【解决方案4】:

        从技术上讲,您可以用更少的输入来做到这一点:

        nvl(
            nullif(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5),' '),0),
            length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg')+5))
        )
        

        但是,我通常会支持 Conrad,并建议您使用 CASE,以便更容易判断代码的意图是为了未来的维护。

        【讨论】:

        • 我喜欢nullif 功能。我必须记住这一点以备将来使用...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多