Pergunta

Existem funções equivalentes nvl () no SQL?

Ou algo próximo o suficiente para ser usado da mesma maneira em certos cenários?


ATUALIZAR:
Não, declarações se
Sem declarações de caso
Não é ISNULL
Sem coalesce

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
Foi útil?

Solução

Você parece estar usando o Informix.

Afaik, há decodificação lá:

DECODE(field, NULL, 'it is null, man', field) deve lhe dar o mesmo resultado que NVL(field, 'it is null, man')

Por favor, poste o nome e a versão exatos do RDBMS que você está usando.

Outras dicas

É NULO (para uma única substituição)

ou

Coalesce (Retorna a primeira expressão não -nula entre seus argumentos.)

O problema com a sua instrução Decode que está gerando o erro 800 é simples. '01/01/2009' está sendo tratado como uma string e é na verdade o quarto argumento que gera o erro.

Aprecie que a entrada e a saída de uma instrução Decode possam ser diferentes tipos de dados, para que o mecanismo exige que você seja mais explícito neste caso. (Você quer purge_date fundido como uma corda ou a corda '01/01/2009', ou o argumento da string analisou como uma data ou a data original? Não há como o motor saber.

Experimente isso:

SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)

Você também pode escrever esse terceiro argumento como:

    DATE('01/01/2009')
    MDY(1,1,2009)

dependendo da versão e preferência pessoal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top