在 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中文网其他相关文章!