【问题标题】:Standard SQL alternative to Oracle DECODEOracle DECODE 的标准 SQL 替代方案
【发布时间】:2011-03-13 19:51:49
【问题描述】:

是否有相当于 Oracle 的 DECODE 函数的 ANSI SQL?

Oracle 的解码函数是 SQL 中的 IF-THEN-ELSE 构造。

【问题讨论】:

    标签: sql oracle ansi-sql


    【解决方案1】:
    CASE WHEN a=1 THEN value1
         WHEN a=2 THEN value2
         ELSE default
    END
    

    SQL Case Statement Syntax?

    【讨论】:

      【解决方案2】:

      CASE 表达式是 ANSI SQL 方法,有“simple”和“searched”两种变体:

      1) 简单的 CASE 表达式:

      CASE col WHEN 1 THEN 'One'
               WHEN 2 THEN 'Two'
               ELSE 'More'
               END
      

      2) 搜索到的 CASE 表达式:

      CASE WHEN col < 0 THEN 'Negative'
           WHEN col = 0 THEN 'Zero'
           ELSE 'Positive'
           END
      

      【讨论】:

        【解决方案3】:

        请注意,Oracle DECODE 将 null 视为等于 null,而 CASE(和任何其他比较)则不。

        示例:如果 a 和 b 均为空值,则 Decode(a,b,1,0) 将返回 1。

        只需运行这 2 个语句即可查看差异。

        select case null when null then 'Y' else 'N' end dd from dual;
        select decode(null, null, 'Y', 'N') dd from dual;
        

        【讨论】:

        • 请注意,case when &lt;whatever&gt; is null then 具有预期的行为,而 case &lt;whatever&gt; when null then 没有,这是一个著名的陷阱。
        【解决方案4】:

        添加 null 可以在解码中进行比较,而如果不是。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-29
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          相关资源
          最近更新 更多