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

如何在 SQL 中将逗号分隔值拆分为多行?

Patricia Arquette
Patricia Arquette原创
2025-01-24 04:08:09982浏览

How to Split Comma-Separated Values into Multiple Rows in SQL?

在 SQL 中将值拆分为多行

数据处理中的一个常见任务是将逗号分隔的字符串拆分为多行,如下所示举例如下请求:

问题:

给定一个包含 id 列和包含逗号分隔值的 name 列的表,返回以下数据格式:

id name
1 a
1 b
1 c
2 b

解决方案:

为了实现这一点,我们可以利用 MySQL 的 SUBSTRING_INDEX 函数结合一个数字表,该表包含一系列数字,最多可达要拆分的最大字段数。下面的查询演示了这种方法:

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n

如果创建数字表不可行,我们可以使用以下查询在查询本身中生成数字序列:

SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  (
    SELECT 1 AS n UNION ALL
    SELECT 2 UNION ALL SELECT 3 UNION ALL
    SELECT 4 UNION ALL SELECT 5
  ) AS numbers INNER JOIN tablename
  ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n

演示:

[SQL Fiddle演示](https://www.sqlfiddle.com/#!5/cf4386/1)

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn