如何在SQL查询中提取逗号分隔值并移除Null、零值与空格
SQL实现:从IdsList表生成移除Null、0及空格的逗号分隔值
原表结构与数据
Name Aid BId CId DId raj 1 Null 0 2 ch 4 3 1 0
需求目标
提取表中数据,生成移除Null、0及空格后的逗号分隔值,期望输出:
commavalue 1,2 4,3,1
不同数据库的实现方案
MySQL 版本
利用CONCAT_WS自动忽略Null值的特性,配合NULLIF把0转为Null,最后清理首尾多余逗号:
SELECT TRIM(BOTH ',' FROM CONCAT_WS( ',', NULLIF(Aid, 0), NULLIF(BId, 0), NULLIF(CId, 0), NULLIF(DId, 0) )) AS commavalue FROM IdsList;
注:如果所有字段都是0/Null,会返回空字符串,符合需求。
SQL Server 版本
通过CROSS APPLY把列转成行,过滤掉无效值后用STRING_AGG拼接:
SELECT STRING_AGG(val, ',') AS commavalue FROM IdsList CROSS APPLY ( VALUES (Aid), (BId), (CId), (DId) ) AS vals(val) WHERE val IS NOT NULL AND val != 0 GROUP BY Name;
PostgreSQL 版本
将字段转为数组后展开,过滤后按原顺序拼接:
SELECT STRING_AGG(val::TEXT, ',' ORDER BY idx) AS commavalue FROM IdsList, UNNEST(ARRAY[Aid, BId, CId, DId]) WITH ORDINALITY AS vals(val, idx) WHERE val IS NOT NULL AND val != 0 GROUP BY Name;
注:WITH ORDINALITY用来保留原字段的顺序,避免拼接结果乱序。
内容的提问来源于stack exchange,提问作者coder rock
相关产品推荐
相关产品推荐

