2009-09-15 5 views
11

MySQL/MSSQL ma schludny mały wbudowany, jeśli funkcja można używać w kwerendy do wykrywania wartości null, jak pokazano poniżej.if (warunek, wtedy, inaczej) w 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", 

... 

Problem używam do teraz jest to, że ten kod nie jest bezpieczny do uruchomienia na bazie danych Oracle, ponieważ nie wydaje się wspierać ten inline jeśli składnia.

Czy istnieje odpowiednik w Oracle?

Odpowiedz

13

pomocą standardowej funkcji zlewają:

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

też użyć własnej funkcji NVL Oracle, który robi to samo.

+0

To wydaje się bardziej podobne do tego, czego szukałem. Dzięki! – ModeEngage

11

Chcesz użyć NVL lub NVL2

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

Awesome. Wielkie dzięki. – ModeEngage

0

Tak, NVL powinno załatwić sprawę.

0

Chcesz funkcję NVL: NVL (foo.bar, 0)

Oracle obsługuje różne IFS przypadkach.

0

Wystarczy zrobić nvl(foo.bar,0), nie trzeba robić

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

Aby uzupełnić resztę tutaj odpowiedzi, które zajmują się głównie z wartościami NULL i zlewają/NVL/NVL2:

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

Instrukcje CASE nie są oczywiście tak zwięzłe, ale są nastawione na elastyczność. Jest to szczególnie przydatne, gdy twoje warunki nie są oparte na NULL-ness.