条件CONCAT,可能为NULL或空值

Hou*_*ont 24 mysql

在下面的代码中,我通过连接地址的各个部分来创建一个Address字段.

但是,如果例如address2为空,则尾部,仍将连接到Address.

这意味着如果所有字段都是空的,我最终会得到结果,,,,.

如果address1"House Number",其他一切都是空的,我最终会House Number,,,,.

CONCAT( COALESCE(address1,'')   ,   ', '    , 
        COALESCE(address2,'')   ,   ', '    , 
        COALESCE(address3,'')   ,   ', '    , 
        COALESCE(city,'')       ,   ', '    , 
        COALESCE(zip, '')
) AS Address, 
Run Code Online (Sandbox Code Playgroud)

只有在地址部分的内容不为空时才有条件地在地址部分之间放置逗号.

如某些东西(伪代码) IF(address1) is NULL use '' ELSE use ','

谢谢.

小智 45

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)
)
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案很优雅.使用LENGTH函数返回NULL,它可以优雅地处理存在空字符串的情况.空字符串不是NULL,因此concat_ws会在空字符串之前错误地包含分隔符.非常好! (2认同)

Mat*_*Mat 29

看看这个CONCAT_WS功能.它完全符合你的要求.

  • 实际上,问题是"可能为NULL或*为空*值",但CONCAT_WS()不会跳过空字符串. (10认同)

Bou*_*egh 12

如下所述:如何concat_ws多个字段并删除空插槽的重复分隔符

这将清除空字符串以及NULL值.

CONCAT_WS(", ", NULLIF(address1, ""), NULLIF(address2, ""), NULLIF(address3, ""), NULLIF(city, ""), NULLIF(zip, ""))
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!在这些情况下,NULLIF 确实是处理空字符串的理想解决方案! (2认同)
  • 使用“NULLIF”时要小心,如果您得到包含“0”的条目,它不会返回它。虽然马丁的解决方案在视觉上不是那么令人愉悦,但它更加简单。 (2认同)

Boj*_*les 5

按照 Mat 的说法使用CONCAT_WS是一个非常好的主意,但我想我应该用不同的方式来做,用混乱的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, 
Run Code Online (Sandbox Code Playgroud)

sIF()检查字段是否有长度,如果有则返回逗号。否则,它返回一个空字符串。


diE*_*cho 5

尝试与MAKE_SET

SELECT MAKE_SET(11111,`address1`,`address2`,`address3`,`city`,`zip`) AS Address
Run Code Online (Sandbox Code Playgroud)

它将返回一个字符串,其中所有 NOT NULL 值均由,