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

如何在MySQL中将逗号分隔的字符串值转换为多行数据?

MySQL逗号分隔字段转多行的优化方案

针对将单字段中逗号分隔值拆分为多行的需求,以下提供两种比传统数字表方案更灵活高效的实现方式,均适用于MySQL 8.0及以上版本:

方法一:递归CTE动态拆分

通过递归公共表达式(CTE)逐次拆分字符串,无需依赖辅助数字表,可适配任意长度的逗号分隔内容:

WITH RECURSIVE split_cte AS (
    -- 初始步骤:提取第一个元素与剩余字符串
    SELECT
        SUBSTRING_INDEX(value, ',', 1) AS item,
        SUBSTRING(value, LOCATE(',', value) + 1) AS remaining
    FROM your_table
    WHERE value IS NOT NULL AND value != ''
    UNION ALL
    -- 递归步骤:持续拆分剩余字符串直至为空
    SELECT
        SUBSTRING_INDEX(remaining, ',', 1) AS item,
        SUBSTRING(remaining, LOCATE(',', remaining) + 1) AS remaining
    FROM split_cte
    WHERE remaining IS NOT NULL AND remaining != ''
)
SELECT item AS value FROM split_cte;

优势:无需预先创建辅助表,逻辑清晰,自动适配任意数量的分隔元素,避免因数字表行数不足导致的数据丢失问题。

方法二:JSON_TABLE快速展开

利用MySQL JSON函数将字符串转换为JSON数组,再通过JSON_TABLE直接展开为多行,代码更简洁:

SELECT j.item AS value
FROM your_table
JOIN JSON_TABLE(
    CONCAT('["', REPLACE(value, ',', '","'), '"]'),
    '$[*]' COLUMNS(item VARCHAR(255) PATH '$')
) j
WHERE value IS NOT NULL AND value != '';

优势:代码直观简洁,借助MySQL内置JSON处理引擎,在字符串长度适中时性能表现优异,写法更易读维护。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:05:31