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

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

Patricia Arquette
发布: 2025-01-24 04:22:11
原创
129 人浏览过

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

将逗号分隔的 SQL 值转换为多行

常见的 SQL 任务涉及将单个单元格的内容拆分为多行。 例如,考虑这个表:

<code class="language-sql">id | name
1  | a,b,c
2  | b</code>
登录后复制

目标是像这样重组这些数据:

<code class="language-sql">id | name
1  | a
1  | b
1  | c
2  | b</code>
登录后复制

方法 1:利用数字表

一个有效的解决方案利用预先存在的“数字”表(包含整数的顺序列表的表)。 下面的查询演示了这种方法:

<code class="language-sql">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</code>
登录后复制

方法二:动态生成数字(无需数字表)

如果专用数字表不可用,可以在查询本身内生成临时数字序列:

<code class="language-sql">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</code>
登录后复制

请记住调整第二种方法中的 UNION ALL 部分,以容纳您在 name 列中预期的逗号分隔值的最大数量。 两种方法都实现相同的结果 - 将逗号分隔的值拆分为单独的行。

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

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