2012-01-18 13 views
13

Descripción:MySql, IFNULL(), COALSESCE() en sustitución de cadena no

Mi declaración debe reemplazar cada vacío title_column con 'sin nombre', pero no:

SELECT 
    COALESCE(main_table.title_column, 'no name') AS title 
FROM main_table; 

IFNULL() se comporta de la misma manera.

¿Qué estoy haciendo mal?

+3

¿Podría ser que esté viendo valores de cadenas vacías en lugar de valores nulos? – Ilion

+0

obviamente, ese es el caso. y otro usuario publicó la solución ... – kiltek

Respuesta

21

COALESCE y IFNULL sustituto sólo NULL valores, su mesa parecen contener cadenas vacías:

SELECT 
    COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title 
FROM main_table; 
4

En MySQL una cadena y un NULL ('') cadena vacía no son la misma cosa.

Usted tiene algunas opciones, para mantener la coherencia utilizo CASO ...

CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END 

Otras opciones podrían ser el COALESCE (NULLIF()) se muestra en otra respuesta (que utiliza NULLIF() para encender vacía cadenas en NULLs y luego usa coalesce como lo desea).

O, posiblemente, sólo IIF) para acortar la sentencia CASE (...

IIF(main_table.title_column = '', 'no name', main_table.title_column) 
1

utiliza esta solución para MySQL,

SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table 
2

Si prefiere una forma funcional de dar soluciones que pueda siempre use esto:

DELIMITER $$ 
-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- -------------------------------------------------------------------------------- 
-- Note: add your server side comments to remember what this routine does on your Api 
-- -------------------------------------------------------------------------------- 
DROP FUNCTION IF EXISTS `IfNullOrEmpty`$$ 
CREATE FUNCTION `IfNullOrEmpty`(s TEXT, value TEXT) RETURNS TEXT 
NOT DETERMINISTIC 
READS SQL DATA 
BEGIN 

IF ((s is null) OR (trim(s) = '') ) THEN 
    return value; 
END IF; 
return s;  
END$$ 

Uso:

SELECT IfNullOrEmpty(t.FieldName,'No Name Given') as Name FROM cms_Table t