Ответ 1
Используйте стандартную функцию COALESCE:
SELECT COALESCE(foo.bar, 0) as "bar", ...
Или используйте Oracle собственную функцию NVL, которая делает то же самое.
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?
Используйте стандартную функцию COALESCE:
SELECT COALESCE(foo.bar, 0) as "bar", ...
Или используйте Oracle собственную функцию NVL, которая делает то же самое.
В дополнение к остальным ответам здесь, которые касаются в основном значений NULL и COALESCE/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 )
Yup, NVL должен сделать трюк.
Вам нужна функция nvl: nvl (foo.bar, 0)
Oracle также поддерживает различные случаи и случаи.
Просто выполните nvl(foo.bar,0)
, вам не нужно делать
(select nvl(foo.bar,0)...