2010-02-26 6 views
8

Ben sorguda tek alan olarak dönmek istiyorum onların adresi de dahil olmak üzere insanların bir listesini MySQL db var. Bu address1, address2, address3, address4, post_code ayrılır ve benMySQL alanlarını birleştirerek ancak görmezden boş olanlar

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

yüzden iyi çalışır address kendi adresinin tam dize ile bitireceğiz ama alanlardan bazıları daha sonra boşsa ben olacak aşağıdaki gibi bir şey yapmak istiyorum Bir çok çift boşlukla sonuçlanın. Ekstra boşlukları nasıl ortadan kaldırabilirim? Her alanda bir IF() yapmaktan daha kolay bir yol var mı?

cevap

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

boş alanlar NULL aslında, NULLIF yapıları atlayabilirsiniz ediyorsanız: Yerine IFNULL ait

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

kullanım CONCAT_WS yerine CONCAT

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

, ayrıca COALESCE kullanabilirsiniz Bu görev için yapıldı.