2009-09-15 47 views
11

MySQL/MSSQL有一个整齐的小内联,如果您可以在查询中使用的函数检测空值,如下所示。如果(条件,然后,否则)在Oracle

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数据库上运行,因为它似乎不支持这种直列如果语法。

在Oracle中是否有等价物?

回答

13

使用标准COALESCE功能:

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

或者使用甲骨文自己的NVL功能,做同样的。

+0

这看起来更像我在找的东西。谢谢! – ModeEngage 2009-09-15 17:07:32

11

你想用NVL,或NVL2

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

太棒了。非常感谢。 – ModeEngage 2009-09-15 17:05:30

0

啊,NVL应该做的伎俩。

0

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

甲骨文不支持各种IFS和案件。

0

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

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

为了补充这里的答案,这主要是处理空值和COALESCE/NVL/NVL2的休息:

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

CASE报表显然不是简洁明了,而是针对灵活性。当你的条件不是基于NULL的时候,这是特别有用的。

相关问题