2010-02-26 27 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 ,这是为了这个任务。