我有一个包含人员列表的MySQL数据库,包括他们的地址,我希望将其作为查询中的一个字段返回。它被分成address1, address2, address3, address4, post_code
,我想做类似下面的事情
SELECT CONCAT(`address1`, ' ', `address2`, ' ', `address3`, ' ', `address4`, ' ', `post_code`) AS `address` FROM `table`
所以我最终会在address
中找到一个完整的地址字符串,但是如果某些字段为空,那么我最终会得到很多双倍空格。如何消除多余的空间?有没有比在每个字段上执行IF()更简单的方法?
答案 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,它是为此任务而设计的。