Ответы:
coalesce
поддерживается как в Oracle, так и в SQL Server и выполняет те же функции, что nvl
и и isnull
. (Есть некоторые важные различия, coalesce
может принимать произвольное количество аргументов и возвращать первый ненулевой аргумент. Тип возвращаемого значения isnull
соответствует типу первого аргумента, что неверно coalesce
, по крайней мере, на SQL Server.)
COALESCE
, перед которым есть одно важное преимущество NVL
: он выполняет сокращенную оценку, тогда как NVL
всегда оценивает оба параметра. Сравните COALESCE(1,my_expensive_function)
с NVL(1,my_expensive_function)
.
COALESE()
отличная функция, и вы можете прочитать о ней в MSDOC> COALESCE - тот же синтаксис работает в Oracle. Если данные имеют пустые строки вместо NULLS вам может понадобиться что - то вроде этого: COALESCE(TRIM(Tbl.myField1), TRIM(Tbl.myField2)) AS "myNewField"
.
Вместо ISNULL()
использования NVL()
.
T-SQL:
SELECT ISNULL(SomeNullableField, 'If null, this value') FROM SomeTable
PL / SQL:
SELECT NVL(SomeNullableField, 'If null, this value') FROM SomeTable
Также используйте, NVL2
как показано ниже, если вы хотите вернуть другое значение из field_to_check
:
NVL2( field_to_check, value_if_NOT_null, value_if_null )
Использование: ORACLE / PLSQL: ФУНКЦИЯ NVL2
Вы можете использовать это условие if x is not null then...
. Это не функция. Также есть NVL()
функция, хороший пример использования здесь: функция NVL ref .
COALESCE
это ANSI, поддерживается Postgres, MySQL ... Единственное предостережение в том, что он не обязательно работает так же быстро, как собственный синтаксис.