если(условие, то, иначе) в 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?

6 ответов


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

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

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


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

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

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


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

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

да, NVL следует сделать трюк.


вы хотите функцию nvl: nvl(foo.bar, 0)

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


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

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