如何将逗号分隔开的字符串,拆分成多行

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
比如字段是小明,小红
如何拆分成多行
返回
小红
小明
【资源配置】
【附件:截图/日志/监控】

mysql是有函数的

tidb有吗

让程序去做不香吗

CREATE TABLE USER (NAME VARCHAR(200));

INSERT INTO USER(NAME) VALUES(‘张三,李四,王五’);

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(a.name,‘,’,b.help_topic_id+1),‘,’,-1) AS NAME
FROM USER a,(SELECT 0 help_topic_id UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) b
WHERE b.help_topic_id < (LENGTH(a.name)-LENGTH(REPLACE(a.name,‘,’,‘’))+1);

1 个赞

通常行转列可以用group_concat实现;

列转行可以使用使用union all 间接拼接来实现。

如:
有个字符串"a,b,c" 要分为多行,可以有下面的操作。
1.第一步,先实现split的功能(借助SUBSTRING_INDEX函数):
mysql> select SUBSTRING_INDEX(‘a,b,c’,‘,’,1),SUBSTRING_INDEX(SUBSTRING_INDEX(‘a,b,c’,‘,’,2),‘,’,-1),SUBSTRING_INDEX(‘a,b,c’,‘,’,-1);
±-------------------------------±-------------------------------------------------------±--------------------------------+
| SUBSTRING_INDEX(‘a,b,c’,‘,’,1) | SUBSTRING_INDEX(SUBSTRING_INDEX(‘a,b,c’,‘,’,2),‘,’,-1) | SUBSTRING_INDEX(‘a,b,c’,‘,’,-1) |
±-------------------------------±-------------------------------------------------------±--------------------------------+
| a | b | c |
±-------------------------------±-------------------------------------------------------±--------------------------------+
1 row in set (0.00 sec)

2.第2步,列转行(借助union):
mysql> select SUBSTRING_INDEX(‘a,b,c’,‘,’,1) union select SUBSTRING_INDEX(SUBSTRING_INDEX(‘a,b,c’,‘,’,2),‘,’,-1) union select SUBSTRING_INDEX(‘a,b,c’,‘,’,-1);
±-------------------------------+
| SUBSTRING_INDEX(‘a,b,c’,‘,’,1) |
±-------------------------------+
| c |
| b |
| a |
±-------------------------------+
3 rows in set (0.01 sec)

1 个赞

楼上是正解,不过不知道你要拆成多行干什么

你这,数据库资源本身就贵,含有这些数据库函数本来处理就比程序处理慢,让程序代码自己处理多好。。。。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。