Équivalent SQL nvl - sans les instructions if / case & amp; isnull & amp; se fondre
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
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
SQL Server: IsNull ou COALESCE http://msdn.microsoft.com/en-us/library/ms184325. aspx
Sybase: fonction isnull http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm
Postgres: Je n'ai pas pu en trouver un, mais je n'ai pas encore vérifié Suggère de sélectionner où IS NULL et de construire à partir de là http://archives.postgresql.org/pgsql-sql/1998- 06 / msg00142.php
DB2 - COALESCE http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000780.htm
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.