You need to enable JavaScript to run this app. 如何在SQL SELECT命令中拆分表内逗号分隔的字符串列为多行结果?
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL SELECT命令中拆分表内逗号分隔的字符串列为多行结果?

逗号分隔字符串拆分为多行的实现方案

不同SQL引擎没有统一的原生字符串拆分函数标准,需要根据实际使用的数据库匹配对应实现逻辑,以下是主流数据库的实现方式,均可基于示例表输出目标单列结果集。

MySQL 8.0+ 实现

方案1:递归CTE拆分(兼容所有8.0以上版本)

WITH RECURSIVE split_helper AS (
    SELECT
        id,
        SUBSTRING_INDEX(strColumn, ',', 1) AS newColumn,
        CASE
            WHEN LOCATE(',', strColumn) > 0 THEN SUBSTRING(strColumn, LOCATE(',', strColumn) + 1)
            ELSE NULL
        END AS remain_str
    FROM test_table
    UNION ALL
    SELECT
        id,
        SUBSTRING_INDEX(remain_str, ',', 1),
        CASE
            WHEN LOCATE(',', remain_str) > 0 THEN SUBSTRING(remain_str, LOCATE(',', remain_str) + 1)
            ELSE NULL
        END
    FROM split_helper
    WHERE remain_str IS NOT NULL
)
SELECT newColumn FROM split_helper;

方案2:JSON_TABLE快速拆分(适配8.0.17及以上版本,语法更简洁)

SELECT jt.newColumn
FROM test_table t,
JSON_TABLE(
    CONCAT('["', REPLACE(t.strColumn, ',', '","'), '"]'),
    '$[*]' COLUMNS (newColumn VARCHAR(100) PATH '$')
) AS jt;

PostgreSQL 实现

直接调用内置的字符串拆分函数即可:

SELECT regexp_split_to_table(strColumn, ',') AS newColumn
FROM test_table;

SQL Server 2016+ 实现

使用内置的STRING_SPLIT函数配合交叉应用完成拆分:

SELECT value AS newColumn
FROM test_table
CROSS APPLY STRING_SPLIT(strColumn, ',');

Oracle 实现

12c及以上版本

通过JSON_TABLE直接拆分:

SELECT newColumn
FROM test_table,
JSON_TABLE(
    '"' || REPLACE(strColumn, ',', '","') || '"',
    '$[*]' COLUMNS (newColumn VARCHAR2(100) PATH '$')
);

11g版本兼容实现

通过正则匹配配合层级查询拆分:

SELECT REGEXP_SUBSTR(strColumn, '[^,]+', 1, LEVEL) AS newColumn
FROM test_table
CONNECT BY LEVEL <= REGEXP_COUNT(strColumn, ',') + 1
    AND PRIOR id = id
    AND PRIOR SYS_GUID() IS NOT NULL;

通用注意事项

  • 如果原字符串存在连续逗号、首尾带逗号的场景,部分引擎会生成空字符串值,可按需追加过滤条件排除无意义空值,例如在查询末尾添加WHERE newColumn != ''。
  • 如果原字符串的分隔符前后存在多余空格,可在拆分结果外层套TRIM()函数清理文本,避免残留无效空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 20:45:01