mysql 一行 拆分多行

如果您要将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;

上述查询将拆分后的数据按idfull_text排序,结果如下:

+----+----------+
| id | full_text|
+----+----------+
| 1  | A        |
+----+----------+
| 1  | B        |
+----+----------+
| 1  | C        |
+----+----------+

在上面的查询中,SUBSTRING_INDEX函数用于获取逗号分隔的文本的指定部分。第一个参数是待拆分的文本,第二个参数是拆分符号(在这种情况下为逗号),第三个参数是拆分的位置。

然后,我们使用CROSS JOINUNION ALL语句将表中的每个元素和数字序列合并,从而创建了一个数字序列,该数字序列的大小等于拆分后的元素数。LENGTHREPLACE函数用于计算拆分后的元素数。

最后,使用ORDER BY语句对结果进行排序,以保证正确的行顺序。

  •