12

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 语法。

甲骨文中是否有等价物?

4

6 回答 6

17

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

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

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

于 2009-09-15T17:07:13.317 回答
14

使用标准的 COALESCE 函数:

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

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

于 2009-09-15T17:02:33.047 回答
12

您想使用NVLNVL2

NVL(t.column, 0)
NVL2( string1, value_if_NOT_null, value_if_null )
于 2009-09-15T17:01:27.633 回答
0

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

于 2009-09-15T17:01:57.027 回答
0

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

Oracle 也支持各种 if 和 case。

于 2009-09-15T17:01:58.210 回答
0

做就做nvl(foo.bar,0),你不必做

(select nvl(foo.bar,0)... 
于 2009-09-15T17:04:35.007 回答