Oracle 中的 if(condition, then, else)

Posted

技术标签:

【中文标题】Oracle 中的 if(condition, then, else)【英文标题】:if(condition, then, else) in Oracle 【发布时间】: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 中有没有等价物?

【问题讨论】:

【参考方案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)... 

【讨论】:

以上是关于Oracle 中的 if(condition, then, else)的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql if condition then select statement1 else select statement2

oraclefunction写法if

Oracle之PL/SQL编程_流程控制语句

在 thinkphp中的<if>condition条件中可以用IN 么?

AutoHotkey 中的一行 if-condition-assignment

Shell if else语句(详解版)