【问题标题】:if(condition, then, else) in OracleOracle 中的 if(condition, then, else)
【发布时间】:2009-09-15 16:59:39
【问题描述】:

MySQL/MSSQL 有一个简洁的内联 if 函数,您可以在查询中使用它来检测空值,如下所示。

SELECT

...

foo.a_field AS "a_field",
SELECT if(foo.bar is null, 0, foo.bar) AS "bar",
foo.a_field AS "a_field",

...

我现在遇到的问题是这段代码在 Oracle 数据库上运行并不安全,因为它似乎不支持这种内联 if 语法。

Oracle 中是否有等价物?

【问题讨论】:

    标签: sql oracle plsql conditional-operator


    【解决方案1】:

    补充此处的其余答案,主要处理 NULL 值和 COALESCE/NVL/NVL2:

    SELECT *
    FROM TheTable
    WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END
    

    显然,CASE 语句没有那么简洁,但它们的目标是灵活。当您的条件不基于 NULL 时,这特别有用。

    【讨论】:

      【解决方案2】:

      使用标准的 COALESCE 函数:

      SELECT COALESCE(foo.bar, 0) as "bar", ...
      

      或者使用 Oracle 自己的 NVL 函数来做同样的事情。

      【讨论】:

      • 这看起来更像是我想要的。谢谢!
      【解决方案3】:

      您想使用NVL,或NVL2

      NVL(t.column, 0)
      NVL2( string1, value_if_NOT_null, value_if_null )
      

      【讨论】:

        【解决方案4】:

        是的,NVL 应该可以解决问题。

        【讨论】:

          【解决方案5】:

          你想要 nvl 函数:nvl(foo.bar, 0)

          Oracle 也支持各种 if 和 case。

          【讨论】:

            【解决方案6】:

            只需nvl(foo.bar,0),你不必这样做

            (select nvl(foo.bar,0)... 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-01-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-07
              • 1970-01-01
              相关资源
              最近更新 更多