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!
posted @   万笑佛  阅读(1761)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示