SQL nvl equivalente - sin declaraciones if / case & amp; isnull & amp; juntarse
Pregunta
¿Hay alguna función equivalente nvl () en SQL?
¿O algo lo suficientemente cercano como para ser usado de la misma manera en ciertos escenarios?
ACTUALIZAR:
no hay declaraciones
sin declaraciones de casos
sin isnull
sin fusión
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
Solución
Parece que está utilizando Informix.
AFAIK, hay DECODE allí:
DECODE (campo, NULL, 'es nulo, man', campo)
debería darle el mismo resultado que NVL (campo, 'es nulo, man')
Publique el nombre exacto y la versión del RDBMS que está utilizando.
Otros consejos
Servidor SQL: IsNull o COALESCE http://msdn.microsoft.com/en-us/library/ms184325. aspx
Sybase: función isnull http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm
Postgres: No pude encontrar uno, aunque no lo he verificado completamente. Sugiere seleccionar dónde ES NULO y construir desde aquí 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
El problema con su declaración DECODE que genera el error 800 es simple. '01 / 01/2009 '
se trata como una cadena, y en realidad es el cuarto argumento que genera el error.
Aprecie que la entrada y salida de una declaración DECODE puede ser de diferentes tipos de datos, por lo que el motor requiere que sea más explícito en este caso. (¿Desea purge_date
emitido como una cadena o la cadena '01 / 01/2009 '
, o el argumento de cadena analizado como una fecha o la fecha original? No hay manera para que el motor lo sepa.
Prueba esto:
SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)
También podría escribir ese tercer argumento como:
DATE('01/01/2009')
MDY(1,1,2009)
dependiendo de la versión y preferencia personal.