2010-02-26 9 views
8

Mam db MySQL z listą osób, w tym ich adres, który chcę zwrócić jako jedno pole w zapytaniu. Jest podzielony na address1, address2, address3, address4, post_code i chcę zrobić coś jak następujeMySQL łączenie pól, ale ignorowanie pustych

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

Więc skończę z pełnym ciągiem ich adres w address który działa dobrze, ale jeśli niektóre pola są puste wtedy będę kończy się dużą ilością podwójnych spacji. Jak mogę wyeliminować dodatkowe spacje? Czy jest łatwiejszy sposób niż wykonywanie IF() na każdym polu?

Odpowiedz

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

Jeśli pustych pól NULL w rzeczywistości, można pominąć NULLIF konstrukty:

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

użytku CONCAT_WS zamiast CONCAT

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

Zamiast IFNULL, można również użyć COALESCE , jest stworzony do tego zadania.

Powiązane problemy