一、需求
某字段的值为 7654,7698,7782,7788
期望的效果:
二、实现语句
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个以逗号为分隔符之前的所有字符。
四、实际语句
CREATE TABLE test_t ( id INT AUTO_INCREMENT , name VARCHAR(40) , text VARCHAR(800) , PRIMARY KEY ( id ) ) ENGINE=INNODB DEFAULT CHARSET=UTF8;
插入数据
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', '王五', '西瓜,橙子,葡萄');
查询语句:
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);
效果:
标签:topic,help,text,逗号,转列,mysql,id,name From: https://www.cnblogs.com/yclh/p/17387666.html