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

如何基于数据库多列值生成字符串?附数据表结构与数据

没问题,我来帮你搞定这个需求——把表中每一行的Col1到Col5里非NULL的值按顺序拼接成字符串。下面分几种常用数据库给你具体的SQL写法:

基于多列非NULL值生成字符串的SQL解决方案

MySQL 实现

在MySQL里,CONCAT_WS()函数天生适配这个场景,它会自动忽略参数中的NULL值,用指定分隔符拼接非NULL内容:

SELECT 
    ID,
    CONCAT_WS(', ', Col1, Col2, Col3, Col4, Col5) AS concatenated_string
FROM your_table_name;

执行后得到的结果如下:

IDconcatenated_string
1MALE, MALE, FEMALE
2FEMALE, MALE
3FEMALE
4MALE, OTHER, FEMALE, FEMALE
5MALE, OTHER, FEMALE, MALE, FEMALE

SQL Server 实现

SQL Server没有直接忽略NULL的拼接函数,但可以通过将列转为行,再用STRING_AGG()聚合拼接:

SELECT 
    t.ID,
    STRING_AGG(v.value, ', ') AS concatenated_string
FROM your_table_name t
CROSS APPLY (
    VALUES (Col1), (Col2), (Col3), (Col4), (Col5)
) v(value)
WHERE v.value IS NOT NULL
GROUP BY t.ID;

这个查询通过CROSS APPLY把每行的列拆成多行,过滤掉NULL后按ID分组拼接,最终结果和MySQL版本一致。

PostgreSQL 实现

PostgreSQL有两种简洁的写法:

方法1:转成行后聚合

SELECT 
    ID,
    STRING_AGG(value, ', ') AS concatenated_string
FROM (
    SELECT 
        ID,
        UNNEST(ARRAY[Col1, Col2, Col3, Col4, Col5]) AS value
    FROM your_table_name
) sub
WHERE value IS NOT NULL
GROUP BY ID;

方法2:数组处理后直接拼接

SELECT 
    ID,
    ARRAY_TO_STRING(ARRAY_REMOVE(ARRAY[Col1, Col2, Col3, Col4, Col5], NULL), ', ') AS concatenated_string
FROM your_table_name;

两种写法都能得到符合预期的拼接结果。如果之后需要调整分隔符、去重或者其他规则,补充细节就行~

内容的提问来源于stack exchange,提问作者Shant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:22