2010-02-26 9 views
8

J'ai une base de données MySQL avec une liste de personnes, y compris leur adresse, que je veux retourner comme un seul champ dans une requête. Il est divisé en address1, address2, address3, address4, post_code et je veux faire quelque chose comme ce qui suitMySQL concaténant des champs mais ignorant les champs vides

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

Alors je vais finir avec une chaîne complète de leur adresse dans address qui fonctionne très bien, mais si certains champs sont vides alors je vais finir avec beaucoup de doubles espaces. Comment puis-je éliminer les espaces supplémentaires? Y at-il un moyen plus facile que de faire un IF() sur chaque champ?

Répondre

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

Si vos champs vides sont NULL en fait, vous pouvez omettre les NULLIF constructions:

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

utilisation CONCAT_WS à la place CONCAT

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

Au lieu de IFNULL, vous pouvez également utiliser COALESCE , c'est fait pour cette tâche.

Questions connexes