You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:35:28