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

如何将 SQL 中的逗号分隔值拆分为单独的行?

Mary-Kate Olsen
发布: 2025-01-14 09:55:42
原创
402 人浏览过

How Can I Split Comma-Separated Values in SQL into Separate Rows?

在 SQL 中拆分逗号分隔的行值

在数据库管理中,经常会遇到存储为逗号分隔值 (CSV) 的数据。但是,出于某些分析或报告目的,可能需要将这些 CSV 拆分为单独的行。在本文中,我们将探讨一种基于 SQL 的方法来执行此拆分操作。

解决方案涉及利用 MySQL 中的 SUBSTRING_INDEX() 函数。此函数允许我们根据分隔符字符从指定字符串中提取子字符串。我们还使用与计数表的交叉连接来生成一系列数字,这些数字用作拆分 CSV 的行索引。

以下是 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>
登录后复制

此查询有效地拆分了 table1 表中 values 列的 CSV 值,并为每个值创建新行。计数表允许拆分单行中的多个值。

示例数据和输出:

考虑 table1 表中的以下数据:

values
somethingA,somethingB,somethingC
somethingElseA, somethingElseB

将查询应用于此数据将产生以下输出:

value
somethingA
somethingB
somethingC
somethingElseA
somethingElseB

通过利用此技术,可以方便地将以 CSV 格式存储的数据拆分为各个行,从而可以进行进一步的分析或处理。

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

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