在下面的代码中,我通过连接地址的各个部分来创建一个地址字段。
但是,如果例如address2
为空,则尾随,
仍将连接到地址。
这意味着如果所有字段都为空,我的结果为,,,,
。
如果address1
为"House Number"
且其他所有内容都为空,我最终会使用House Number,,,,
。
CONCAT( COALESCE(address1,'') , ', ' ,
COALESCE(address2,'') , ', ' ,
COALESCE(address3,'') , ', ' ,
COALESCE(city,'') , ', ' ,
COALESCE(zip, '')
) AS Address,
只有在地址部分的内容不为空时才有条件地在地址部分之间放置逗号。
诸如(伪代码)IF(address1) is NULL use '' ELSE use ','
谢谢。
答案 0 :(得分:38)
CONCAT_WS(', ',
IF(LENGTH(`address1`),`address1`,NULL),
IF(LENGTH(`address2`),`address2`,NULL),
IF(LENGTH(`address3`),`address3`,NULL),
IF(LENGTH(`city`),`city`,NULL),
IF(LENGTH(`zip`),`zip`,NULL)
)
答案 1 :(得分:29)
查看CONCAT_WS
功能。它完全符合您的要求。
答案 2 :(得分:10)
在这里回答:How to concat_ws multiple fields and remove duplicate separators for empty slots
这将清空空字符串以及NULL值。
CONCAT_WS(", ", NULLIF(address1, ""), NULLIF(address2, ""), NULLIF(address3, ""), NULLIF(city, ""), NULLIF(zip, ""))
答案 3 :(得分:4)
使用CONCAT_WS
作为Mat说的是一个非常好的主意,但我认为我会采用不同的方式,使用凌乱的IF()
语句:
CONCAT( COALESCE(address1,''), IF(LENGTH(address1), ', ', ''),
COALESCE(address2,''), IF(LENGTH(address2), ', ', ''),
COALESCE(address3,''), IF(LENGTH(address3), ', ', ''),
COALESCE(city,''), IF(LENGTH(city), ', ', ''),
COALESCE(zip,''), IF(LENGTH(address1), ', ', ''),
) AS Address,
IF()
检查字段是否有长度,如果是,则返回逗号。否则,它返回一个空字符串。
答案 4 :(得分:3)
尝试使用MAKE_SET
SELECT MAKE_SET(11111,`address1`,`address2`,`address3`,`city`,`zip`) AS Address
它将返回一个字符串,其中所有NOT NULL值由,
答案 5 :(得分:1)