Question

Existe-t-il des fonctions équivalentes à nvl () dans SQL?

Ou quelque chose d'assez proche pour être utilisé de la même manière dans certains scénarios?


METTRE À JOUR: Déclarations no if, aucune déclaration de cas, no isnull
no 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
Était-ce utile?

La solution

Vous semblez utiliser Informix.

Pour ce qui est de ma connaissance, il y a DECODE ici:

DECODE (champ, NULL, 'il est nul, man', champ) devrait vous donner le même résultat que NVL (champ, 'c'est nul, man')

Veuillez indiquer le nom exact et la version du SGBDR que vous utilisez.

Autres conseils

ISNULL (pour un remplacement unique)

ou

COALESCE (retourne la première expression non vide parmi ses arguments.)

Le problème avec votre instruction DECODE qui génère l'erreur 800 est simple. '01 / 01/2009 ' est traité comme une chaîne, et il s’agit en fait du quatrième argument qui génère l’erreur.

N'oubliez pas que l'entrée et la sortie d'une instruction DECODE peuvent être de types de données différents. Le moteur requiert donc que vous soyez plus explicite dans ce cas. (Voulez-vous que purge_date soit converti en chaîne ou que la chaîne '01 / 01/2009 ', ou que l'argument de chaîne soit analysé en tant que date ou date d'origine? pour que le moteur sache.

Essayez ceci:

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

Vous pouvez également écrire ce troisième argument sous la forme suivante:

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

selon la version et les préférences personnelles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top