If (условие, then else) в Oracle

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?

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Yup, NVL должен сделать трюк.

Ответ 5

Вам нужна функция nvl: nvl (foo.bar, 0)

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

Ответ 6

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

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