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