SQL NVL эквивалент - без операторов/case и iSnull & Coalesce

StackOverflow https://stackoverflow.com/questions/451060

  •  19-08-2019
  •  | 
  •  

Вопрос

Есть ли какие -либо эквивалентные функции 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)

в зависимости от версии и личных предпочтений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top