首页 > 数据库 > mysql教程 > 如何将逗号分隔值转换为 MySQL 中的单独行?

如何将逗号分隔值转换为 MySQL 中的单独行?

Patricia Arquette
发布: 2025-01-14 08:30:42
原创
608 人浏览过

How to Convert Comma-Separated Values into Individual Rows in MySQL?

将逗号分隔值转换为 MySQL 中的单独行

本指南演示了如何将 MySQL 列中的逗号分隔值转换为单独的行。 假设您有一个表,其中有一列包含逗号分隔的数据,如下所示:

<code>somethingA,somethingB,somethingC
somethingElseA, somethingElseB</code>
登录后复制

目标是将这些数据重组为:

<code>somethingA
somethingB
somethingC
somethingElseA
somethingElseB</code>
登录后复制

此 SQL 查询实现了此转换:

<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
登录后复制

说明:

此查询巧妙地使用动态生成的数字表(子查询)和 SUBSTRING_INDEX() 函数。 SUBSTRING_INDEX() 根据分隔符提取子字符串。数字表提供每个逗号分隔值的索引。 WHERE 子句确保查询仅处理不超过每行中逗号分隔元素的实际数量的值。

要点:

  • SUBSTRING_INDEX(string, delimiter, count):这个功能很关键。 string 是输入,delimiter 是逗号,count 指定要使用的分隔符的出现位置。 count-1 获取 最后一次出现分隔符后 的所有内容。
  • 子查询创建一个临时数字表。 如果您经常执行此类操作,您可以将其替换为预先存在的数字表,以提高性能。
  • WHERE子句根据原始字符串中逗号的数量动态调整返回的行数,防止错误。

此方法有效地将逗号分隔的值拆分为单独的行,从而产生更干净且更易于管理的数据集。

以上是如何将逗号分隔值转换为 MySQL 中的单独行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板