2010-02-26 54 views
8

我有一個MySQL數據庫與人員列表,包括他們的地址,我想返回作爲查詢中的一個字段。它分成address1, address2, address3, address4, post_code,我想這樣做MySQL連接字段,但忽略空字段

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

所以我會與他們的地址的完整字符串結束在address其工作正常,但如果某些字段是空的話,我會在下結束了很多雙重空間。我怎樣才能消除額外的空間?有沒有比每個領域做IF()更簡單的方法?

回答

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

如果空字段NULL其實,你可以省略NULLIF結構:

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

使用CONCAT_WS代替CONCAT

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

相反IFNULL的,你也可以使用COALESCE ,這是爲了這個任務。