2009-09-15 5 views
11

MySQL/MSSQL ha una funzione inline se è possibile utilizzare all'interno di query per rilevare valori nulli, come illustrato di seguito.if (condition, then, else) in 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", 

... 

Il problema che sto funzionando in ora è che questo codice non è sicuro per essere eseguito su un database Oracle, come sembra, non a sostegno di questa linea, se la sintassi.

Esiste un equivalente in Oracle?

risposta

13

utilizzare la funzione COALESCE di serie:

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

O usare propria funzione NVL di Oracle che fa lo stesso.

+0

Questo sembra più quello che stavo cercando. Grazie! – ModeEngage

11

che si desidera utilizzare NVL, o NVL2

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

Impressionante. Grazie molto. – ModeEngage

0

Yup, NVL dovrebbe fare il trucco.

0

si desidera che la funzione NVL: NVL (foo.bar, 0)

Oracle supporta diversi se e casi così.

0

Basta fare nvl(foo.bar,0), non dovete fare

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

Per completare il resto delle risposte qui, che si occupano principalmente di valori NULL e COALESCE/NVL/NVL2:

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

Le dichiarazioni CASE non sono così sintetiche, ovviamente, ma sono orientate alla flessibilità. Ciò è particolarmente utile quando le condizioni non sono basate su NULL-ness.