mysql某个字段的格式为字符串多个元素以拼接。将他拆分开为多行记录
可以使用MySQL内置函数SUBSTRING_INDEX和UNION ALL实现将一个字段以逗号拼接的字符串拆分成多行记录,具体实现如下:
假设有一张表test,其中字段str的格式为字符串,多个元素以逗号拼接:
CREATE TABLE test (
id INT(11) NOT NULL AUTO_INCREMENT,
str VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO test (str) VALUES ('a,b,c'), ('d,e,f,g'), ('h,i');
使用SUBSTRING_INDEX函数将字符串拆分成多行记录:
SELECT SUBSTRING_INDEX(str, ',', 1) AS str FROM test
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', 2), ',', -1) AS str FROM test
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', 3), ',', -1) AS str FROM test
...
其中,SUBSTRING_INDEX(str, ',', n)表示将str以逗号为分隔符,取第n个元素之前的所有内容;SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', n), ',', -1)表示将str以逗号为分隔符,取第n个元素之后的所有内容。通过不断改变n的值,可以将一个拼接的字符串拆分成多行记录。最终的结果如下:
+------+
| str |
+------+
| a |
| d |
| h |
| b |
| e |
| i |
| c |
| f |
| g |
+------+
原文地址: https://www.cveoy.top/t/topic/bYeD 著作权归作者所有。请勿转载和采集!