if (условие, то еще) в Oracle - PullRequest
       37

if (условие, то еще) в Oracle

12 голосов
/ 15 сентября 2009

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, так как кажется, что он не поддерживает этот встроенный синтаксис.

Есть ли эквивалент в Oracle?

Ответы [ 6 ]

15 голосов
/ 15 сентября 2009

В дополнение к остальным ответам, которые касаются в основном значений NULL и COALESCE / NVL / NVL2:

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

Операторы CASE, очевидно, не так лаконичны, но они ориентированы на гибкость. Это особенно полезно, когда ваши условия не основаны на NULL-ности.

14 голосов
/ 15 сентября 2009

Используйте стандартную функцию COALESCE:

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

Или используйте собственную функцию Oracle NVL, которая делает то же самое.

12 голосов
/ 15 сентября 2009

Вы хотите использовать NVL или NVL2

NVL(t.column, 0)
NVL2( string1, value_if_NOT_null, value_if_null )
0 голосов
/ 15 сентября 2009

Просто сделайте nvl(foo.bar,0), вам не нужно делать

(select nvl(foo.bar,0)... 
0 голосов
/ 15 сентября 2009

Требуется функция nvl: nvl (foo.bar, 0)

Oracle также поддерживает различные случаи и случаи.

0 голосов
/ 15 сентября 2009

Да, НВЛ должно сработать.

...