如果您要将MySQL表中的一行数据拆分成多行,请使用MySQL内置函数
SUBSTRING_INDEX
和
UNION ALL
语句来完成此操作。
假设您有以下名为
table_name
的表:
+----+----------+
| id | full_text|
+----+----------+
| 1 | A,B,C |
+----+----------+
您可以使用以下查询将full_text
列的数据拆分为多行:
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(full_text, ',', n.digit+1), ',', -1) as full_text
FROM table_name
CROSS JOIN
SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
WHERE n.digit <= LENGTH(full_text) - LENGTH(REPLACE(full_text, ',', ''))
ORDER BY id, full_text;
上述查询将拆分后的数据按id
和full_text
排序,结果如下:
+----+----------+
| id | full_text|
+----+----------+
| 1 | A |
+----+----------+
| 1 | B |
+----+----------+
| 1 | C |
+----+----------+
在上面的查询中,SUBSTRING_INDEX
函数用于获取逗号分隔的文本的指定部分。第一个参数是待拆分的文本,第二个参数是拆分符号(在这种情况下为逗号),第三个参数是拆分的位置。
然后,我们使用CROSS JOIN
和UNION ALL
语句将表中的每个元素和数字序列合并,从而创建了一个数字序列,该数字序列的大小等于拆分后的元素数。LENGTH
和REPLACE
函数用于计算拆分后的元素数。
最后,使用ORDER BY
语句对结果进行排序,以保证正确的行顺序。