2010-02-26 11 views
8

Tengo un DB de MySQL con una lista de personas, incluida su dirección, que quiero devolver como un campo en una consulta. Se divide en address1, address2, address3, address4, post_code y quiero hacer algo como lo siguienteMySQL concatenan campos pero ignoran los vacíos

SELECT CONCAT(`address1`, ' ', `address2`, ' ', `address3`, ' ', `address4`, ' ', `post_code`) AS `address` FROM `table` 

Así que va a terminar con una cadena completa de su domicilio en address que funciona bien, pero si algunos de los campos están vacíos entonces voy terminan con muchos espacios dobles ¿Cómo puedo eliminar los espacios extra? ¿Hay una manera más fácil que hacer un IF() en cada campo?

Respuesta

17
SELECT CONCAT_WS(' ', NULLIF(address1, ''), NULLIF(address2, ''), NULLIF(address3, ''), NULLIF(address4, ''), NULLIF(post_code, '')) 
FROM table 

Si sus campos vacíos se NULL de hecho, se puede omitir el NULLIF construcciones:

SELECT CONCAT_WS(' ', address1, address2, address3, address4, post_code) 
FROM table 
2

uso CONCAT_WS lugar CONCAT

SELECT CONCAT_WS(' ',`address1`, `address2`, `address3`, `address4`, `post_code`) AS `address` 
FROM `table`; 
1

En lugar de IFNULL, también se puede usar COALESCE , está hecho para esta tarea.

Cuestiones relacionadas