mysql 字段逗号分割行转列操作
一、需求
某字段的值为 7654,7698,7782,7788
期望的效果:
二、实现语句
1 2 3 | SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( '7654,7698,7782,7788' , ',' ,help_topic_id+1), ',' ,-1) AS num FROM mysql.help_topic WHERE help_topic_id < LENGTH( '7654,7698,7782,7788' )-LENGTH( REPLACE ( '7654,7698,7782,7788' , ',' , '' ))+1; |
三、知识点
1、mysql.help_topic 这个是什么?
mysql.help_topic
是 MySQL 数据库系统中的一个系统表,用于存储关于数据库、表、列等对象的帮助主题信息。
这里只用到 help_topic_id(帮助主题 ID) 这一个字段,这里实际只需要一个数字的序列,自己生成一个不用mysql.help_topic
也完全没问题。
如果不是root用户需要赋权限 GRANT SELECT ON mysql.help_topic TO 'youruser'@'%'
flush privileges;
查询看看是什么样的数据(我们需要的就是第一列这个序号)
2、函数 字符串拆分: SUBSTRING_INDEX(str, delim, count)
参数解说 解释
str 需要拆分的字符串
delim 分隔符,通过某字符进行拆分
count 当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。
例子:获取第2个以逗号为分隔符之前的所有字符。
四、实际语句
1 2 3 4 5 6 | CREATE TABLE test_t ( id INT AUTO_INCREMENT , name VARCHAR (40) , text VARCHAR (800) , PRIMARY KEY ( id ) ) ENGINE=INNODB DEFAULT CHARSET=UTF8; |
插入数据
1 2 3 | INSERT INTO `neirongdb`.`test_t` (`id`, ` name `, `text`) VALUES ( '1' , '张三' , '苹果' ); INSERT INTO `neirongdb`.`test_t` (`id`, ` name `, `text`) VALUES ( '2' , '李四' , '香蕉,橘子' ); INSERT INTO `neirongdb`.`test_t` (`id`, ` name `, `text`) VALUES ( '3' , '王五' , '西瓜,橙子,葡萄' ); |
查询语句:
1 2 3 4 5 | SELECT a.id, a. name , substring_index(substring_index(a.text, ',' , b.help_topic_id + 1), ',' , - 1) AS text FROM test_t a INNER JOIN mysql.help_topic b ON b.help_topic_id < (length(a.text) - length( REPLACE (a.text, ',' , '' )) + 1); |
效果:
资源丰富的的网盘资源:网盘资源大全! 推荐一个适合零基础学习SQL的网站:不用安装数据库,在线轻松学习SQL!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!