2011-04-01 10 views
5

Me gustaría escribir una selección donde muestre el valor del campo de forma normal, excepto cuando el campo es nulo. Si es nulo, me gustaría mostrar un texto especial, por ejemplo, "El campo es nulo". ¿Cómo podría hacer esto?Oracle: Mostrar texto especial si el campo es nulo

// Oracle newbie 

Respuesta

11

me gusta la función COALESCE utilizar para este propósito. Devuelve el primer valor no nulo de argumentos dados (para que pueda probar más de un campo a la vez).

SELECT COALESCE(NULL, 'Special text') FROM DUAL 

Así que esto también funcionaría:

SELECT COALESCE(
    First_Nullable_Field, 
    Second_Nullable_Field, 
    Third_Nullable_Field, 
    'All fields are NULL' 
) FROM YourTable 
+2

+1 porque 'COALESCE()' funciona para mysql y otros servidores SQL, no solo para ORACLE. – ZeissS

4

Sólo tiene que insertar la función/SQL PL NVL en su consulta

SELECT NVL (SOMENULLABLEFIELD, 'campo es nulo') SOMENULLABLEFIELD DE MITABLA;

Más detalles aquí: http://www.techonthenet.com/oracle/functions/nvl.php

+1

Eso debería ser comillas simples no comillas dobles para la cadena literal –

+0

1 Esto es exactamente lo que es para NVL. – Tony

3

También es posible usar DECODE:

select value, decode(value, NULL, 'SPECIAL', value) from 
    (select NULL value from dual 
    union all 
    select 2 value from dual 
) 
+0

Bueno, si vamos a sugerir soluciones innecesariamente verbales para un problema simple ... ¿qué tal 'CASE CUANDO mycolumn ES NULO ENTONCES' Es NULL, baby 'ELSE mycolumn END' –

+0

Punto tomado - NVL/COALESCE es de hecho mucho más limpio y más corto que DECODE. –

+0

+1, aunque no es la solución más elegante a la pregunta, me ayudó cuando necesito mostrar un texto nulo y un texto diferente para no nulo. – Tony

Cuestiones relacionadas