SQL Server如何同等处理空字符串与NULL 拼接有效列值为指定格式
解决方案
你可以通过CASE判断过滤NULL+空字符串,配合CONCAT_WS函数实现需求,CONCAT_WS会自动忽略NULL值,不会生成多余的逗号,示例代码如下:
SELECT ISNULL( NULLIF( CONCAT_WS( ',', -- 逐列判断,只有非NULL且非空字符串才生成对应格式字符串 CASE WHEN A IS NOT NULL AND A <> '' THEN CONCAT('A:', A) END, CASE WHEN B IS NOT NULL AND B <> '' THEN CONCAT('B:', B) END, CASE WHEN C IS NOT NULL AND C <> '' THEN CONCAT('C:', C) END, CASE WHEN D IS NOT NULL AND D <> '' THEN CONCAT('D:', D) END ), '' ), ' ' ) AS format_result FROM 你的表名
逻辑说明
- 对每一列单独做
CASE判断:仅当列值非NULL且不是空字符串时,返回列名:列值格式的字符串,否则返回NULL CONCAT_WS函数用逗号作为分隔符拼接所有非NULL的结果,自动跳过NULL值,不会出现多余的逗号或者空项(你遇到的A:,B:这类问题就会被解决)- 如果所有列都不符合条件,
CONCAT_WS会返回空字符串,用NULLIF将空字符串转为NULL后,再通过ISNULL返回要求的单空格' '
内容的提问来源于stack exchange,提问作者Andulos
相关产品推荐
相关产品推荐

