如何在 CONCAT MySQL 中排除 NULL 值?

ed-*_*-ta 20 mysql null concat

如果我有这个 - tadd 是Address表:

CONCAT(tadd.street_number, ' ',
            tadd.street_name,', ',
            tadd.apt_number,', ',
            tadd.city,', ',
            tadd.postal_code,', ',
            tadd.country) AS 'Address'
Run Code Online (Sandbox Code Playgroud)

如果 apt_number 不存在,有没有办法排除它?

我在想:

WHERE tadd.apt_number IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

但它只会返回那些带有apt_number, 的行,即使某些东西有效,我该如何处理那个额外的逗号。

如果是重复的,请在评论中发布链接。

ype*_*eᵀᴹ 23

如果要跳过NULL值(但不是空字符串),可以使用CONCAT_WS()函数:

CONCAT_WS( ', ',            -- Separator
           CONCAT_WS(' ', tadd.street_number, tadd.street_name),
           tadd.apt_number,  tadd.city, 
           tadd.postal_code, tadd.country
         ) AS Address
Run Code Online (Sandbox Code Playgroud)

从文档:

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS()代表 Concatenate With Separator,是CONCAT(). 第一个参数是其余参数的分隔符。在要连接的字符串之间添加分隔符。分隔符可以是字符串,其余参数也可以。如果分隔符为NULL,则结果为NULL

CONCAT_WS()不跳过空字符串。但是,它会跳过NULL分隔符参数之后的任何


oNa*_*are 9

通过将NULL空字符串包装在COALESCEor 中来转换空字符串中的值IFNULL

如果为空:

SELECT
    CONCAT(IFNULL(tadd.street_number,''),
        ' ',IFNULL(tadd.street_name,''),
        ', ',IFNULL(tadd.apt_number,''),
        ', ',IFNULL(tadd.city,''),
        ', ',IFNULL(tadd.postal_code,''),
        ', ',IFNULL(tadd.country,'')) AS 'Address'
FROM db.tbl;
Run Code Online (Sandbox Code Playgroud)

合并:

SELECT
    CONCAT(COALESCE(tadd.street_number,''), 
        ' ',COALESCE(tadd.street_name,''),
        ', ',COALESCE(tadd.apt_number,''),
        ', ',COALESCE(tadd.city,''),
        ', ',COALESCE(tadd.postal_code,''),
        ', ',COALESCE(tadd.country,'')) AS 'Address'
FROM db.tbl
Run Code Online (Sandbox Code Playgroud)