MySQL连接字段但忽略空字段

时间:2010-02-26 16:00:25

标签: mysql concatenation

我有一个包含人员列表的MySQL数据库,包括他们的地址,我希望将其作为查询中的一个字段返回。它被分成address1, address2, address3, address4, post_code,我想做类似下面的事情

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

所以我最终会在address中找到一个完整的地址字符串,但是如果某些字段为空,那么我最终会得到很多双倍空格。如何消除多余的空间?有没有比在每个字段上执行IF()更简单的方法?

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:2)

使用CONCAT_WS代替CONCAT

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

答案 2 :(得分:1)

除了IFNULL,您还可以使用COALESCE,它是为此任务而设计的。