2009-09-15 20 views
11

MySQL/MSSQLは、以下のように、クエリ内でヌル値を検出するために使用することができます。if(条件、then、else)in

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関数を使用してください。

+0

これは私が探していたものによく似ています。ありがとう! – ModeEngage

11

あなたがトリックを行う必要がありNVL、または

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

驚くばかりです。どうもありがとう。 – ModeEngage

0

うんNVL2NVLを使用したいです。

0

あなたはNVL関数をしたい:NVL(foo.bar、0)

オラクルは、同様に、様々なIFSと例をサポートしています。

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

それとも同じことをOracle独自のNVL関数を使用します。

0

nvl(foo.bar,0)を行うだけで、あなたはNULL値を主に扱うとCOALESCE/NVL/NVL2れ、ここでの回答の残りの部分を補うために

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

を行う必要はありません。

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

CASE文は、明らかに簡潔ではありませんが、柔軟性を重視しています。これは、条件がNULLに基づいていない場合に特に便利です。