SQL NVL эквивалент - без операторов/case и iSnull & Coalesce
Вопрос
Есть ли какие -либо эквивалентные функции NVL () в SQL?
Или что -то достаточно близкое, чтобы быть использованным таким же образом в определенных сценариях?
ОБНОВИТЬ:
Нет, если утверждения
Нет заявлений
Нет
Нет боя
select nvl (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
(expression)
SODIUFOSDIUFSDOIFUDSF
1 row(s) retrieved.
select isnull (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
674: Routine (isnull) can not be resolved.
Error in line 1
Near character position 8
select coalesce (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
674: Routine (coalesce) can not be resolved.
Error in line 1
Near character position 8
select decode(purge_date, NULL, "01/01/2009", purge_date) from id_rec where id=74115;
800: Corresponding types must be compatible in CASE expression.
Error in line 1
Near character position 57
Решение
Вы, кажется, используете Informix.
Afaik, там декодируется:
DECODE(field, NULL, 'it is null, man', field)
должен дать вам тот же результат, что и NVL(field, 'it is null, man')
Пожалуйста, опубликуйте точное имя и версию используемых вами RDBMS.
Другие советы
SQL Server: ISNULL или COALESCEhttp://msdn.microsoft.com/en-us/library/ms184325.aspx
Sybase: функция isnullhttp://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm
Postgres: Я не мог найти его, хотя не полностью проверил. Предлагает выбрать, где NULL и построить отсюдаhttp://archives.postgresql.org/pgsql-sql/1998-06/msg00142.php
DB2 - Coalescehttp://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000780.htm
Проблема с вашим оператором декодирования, которая генерирует ошибку 800, проста. '01/01/2009'
рассматривается как строка, и это фактически 4 -й аргумент, который генерирует ошибку.
Цените, что ввод и вывод оператора декодирования могут быть разными типами данных, поэтому двигатель требует, чтобы вы были более явными в этом случае. (Вы хотите purge_date
бросить в виде строки или строки '01/01/2009'
, или аргумент строки, проанализированный как дата или исходная дата? У двигателя нет возможности узнать.
Попробуй это:
SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)
Вы также можете написать этот 3 -й аргумент как:
DATE('01/01/2009')
MDY(1,1,2009)
в зависимости от версии и личных предпочтений.