если (условие, то, иначе) в 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, поскольку он, похоже, не поддерживает этот встроенный синтаксис if.

Есть ли аналог в Oracle?


person ModeEngage    schedule 15.09.2009    source источник


Ответы (6)


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

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

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

person Tony Andrews    schedule 15.09.2009
comment
Это больше похоже на то, что я искал. Спасибо! - person ModeEngage; 15.09.2009

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

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

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

person David Andres    schedule 15.09.2009

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

NVL(t.column, 0)
NVL2( string1, value_if_NOT_null, value_if_null )
person OMG Ponies    schedule 15.09.2009

Да, NVL должен помочь.

person Eric Petroelje    schedule 15.09.2009

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

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

person SquareCog    schedule 15.09.2009

Просто сделай nvl(foo.bar,0), делать не обязательно

(select nvl(foo.bar,0)... 
person tuinstoel    schedule 15.09.2009