2012-03-05 17 views
40

¿Cómo se reemplaza un valor NULL en la selección con una cadena vacía? No parece muy profesional dar salida a valores "NULL".MySql Query Reemplazar NULL con Empty String en Seleccionar

Esto es muy inusual y basado en mi sintaxis esperaría que funcionara. Esperando una explicación de por qué no.

select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test; 

Ejemplo de lo que la tabla original se parece, lo que yo quiero, y lo imprime real:

original  wanted  what actually prints 
--------  ------  --------------------- 
value1  value1  
NULL      NULL 
value2  value2  
NULL      NULL 

Como se puede ver que hace lo contrario de lo que quiero, por lo tanto, he intentado dar la vuelta al IS NULL a IS NOT NULL y por supuesto que no lo corrigió, también intentó cambiar la posición de when case, que no funcionó.

Editar: Parece que las 3 soluciones que figuran a continuación hacen la tarea. respecto

select if(prereq IS NULL ," ",prereq) from test 
select IFNULL(prereq,"") from test 
select coalesce(prereq, '') from test 
+1

Creo que '(prereq IS NULL)' debería simplemente leer 'NULL' – ScottJShea

Respuesta

2

Algunas de estas funciones integradas debe trabajar:

Coalesce 
Is Null 
IfNull 
0

Prueba de esto, esto también debe deshacerse de esas líneas vacías también: la

SELECT prereq FROM test WHERE prereq IS NOT NULL; 
+0

Esto filtra el resultado que no creo que sea el OP después de – Simon

+0

Esta es mi solución basada en su ejemplo. Realmente no veo la razón por la cual las líneas en blanco serían más profesionales que los valores NULL. –

9

Trate de abajo;

select if(prereq IS NULL ," ",prereq) from test 
+0

¿Cómo omito cuando nulo? (¿no lo seleccionas?) – Pathros

1

Probar COALESCE. Devuelve el primer valor no NULL.

SELECT COALESCE(`prereq`, ' ') FROM `test` 
55
SELECT COALESCE(prereq, '') FROM test 

Coalesce devolverá el primer argumento no nulo que se le pasa de izquierda a derecha. Si todos los argumentos son nulos, devolverá nulo, pero estamos forzando una cadena vacía allí, por lo que no se devolverán valores nulos.

También tenga en cuenta que el operador COALESCE es compatible con SQL estándar. Este no es el caso de IFNULL. Entonces, es una buena práctica usar el primero. Además, tenga en cuenta que COALESCE admite más de 2 parámetros y repetirá sobre ellos hasta que se encuentre una coincidencia no nula.

+1

De acuerdo, vale la pena señalar la especificidad de MySQL de IFNULL. Funciona en el caso OP pero no en otros. – JScoobyCed

76

Si realmente debe salida de cada valores incluyendo los NULL:

select IFNULL(prereq,"") from test 
+0

+1 esta es la respuesta más simple IMO – Simon

+0

¿Cómo harías para desmarcar u omitir cuando hay valores nulos? – Pathros

3

La forma original es casi perfecto, sólo hay que omitir prerrequisito después CASO:

SELECT 
    CASE 
    WHEN prereq IS NULL THEN ' ' 
    ELSE prereq 
    END AS prereq 
FROM test;