实现方式: 
sELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
mysql.help_topic 
WHERE 
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

【1】字符串拆分: SUBSTRING_INDEX(str, delim, count)

参数解说     解释
str     需要拆分的字符串
delim     分隔符,通过某字符进行拆分
count     当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

(1)获取第2个以“,”逗号为分隔符之前的所有字符。
SUBSTRING_INDEX('7654,7698,7782,7788',',',2)
(2)获取倒数第2个以“,”逗号分隔符之后的所有字符
SUBSTRING_INDEX('7654,7698,7782,7788',',',-2)


【2】替换函数:replace( str, from_str, to_str)


参数名     解释
str       需要进行替换的字符串
from_str   需要被替换的字符串
to_str     需要替换的字符串


2. 举例 

(1)将分隔符“,”逗号替换为“”空。
REPLACE('7654,7698,7782,7788',',','')


【3】获取字符串长度:LENGTH( str )


参数名   解释
str     需要计算长度的字符串

(1)获取 ‘7654,7698,7782,7788’ 字符串的长度
LENGTH('7654,7698,7782,7788')
实现的SQL解析
SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
mysql.help_topic 
WHERE 
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

此处利用 mysql 库的 help_topic 表的 help_topic_id 来作为变量,因为 help_topic_id 是自增的,当然也可以用其他表的自增字段辅助。

help_topic 表:


实现步骤:
Step1:首先获取最后需被拆分成多少个字符串,利用 help_topic_id 来模拟遍历 第n个字符串。

涉及的代码片段:

help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

Step2:根据“,”逗号来拆分字符串,此处利用 SUBSTRING_INDEX(str, delim, count) 函数,最后把结果赋值给 num 字段。

涉及的代码片段:

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 

这里使用到mysql的内置表help_topic_id,里面有508条数据(不同版本数据条数有差别),用户需要有对该表查询的权限才行,这样的话只满足分割数量少于508条的字符串,否则应该自定义辅助表,设置更大的一个递增列

https://www.cnblogs.com/gered/p/10797012.html【0】需求数据库中 num字段值为:7654,7698,7782,7788实现的效果:需要将一行数据变成多行7654769877827788实现方式: sELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num FROM mysql.h..
一、函数功能:对字符串进行分隔数组,取指定顺序位置的子字符串,支持左右双向获取,支持默认值返回,附有测试用例 二、函数格式:fn_get_split_val(in_str varchar,in_delimiter varchar,in_order int,in_default varchar) 三、测试用例
工作碰到需求简化后是这样的: 两个表设计的不太合理,学生表student、老师表teacher、学生表有个字段是teachers,保存的是所有老师的id,用逗号隔开,想要查询某学生的老师? student表 id name teachers 1 张三 1,2 2 李四 2,3 teacher表 id name 1 李老师 2 张老师 3 ...
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num mysql.help_topic
下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),”) end insert @t
DROP TABLE IF EXISTS `test`; CREATE TABLE IF NOT EXISTS `test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT , `name` varchar(255) DEFAULT NULL, `num` int(8), PRIMARY KEY (`id`) INSERT INTO `test`(`name`, `num`) VALUES ('a1,b258,c', 11); INSERT INTO
MySQL提供了很多函数来拆分字符串,常见的有SUBSTRING、LEFT、RIGHT、REPLACE等函数。这些函数可以将字符串按照指定的规则进行拆分拆分多个列。 最常用的拆分字符串函数是SUBSTRING_INDEX函数,该函数可以通过指定分隔符分隔符出现的次数,将一个字符串拆分多个部分。例如,我们有一个字符串“abc,d,efg,hijk”,我们想要将它拆分成四个部分,可以使用SUBSTRING_INDEX函数,如下所示: SELECT SUBSTRING_INDEX('abc,d,efg,hijk', ',', 1) AS col1, SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 2), ',', -1) AS col2, SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 3), ',', -1) AS col3, SUBSTRING_INDEX('abc,d,efg,hijk', ',', -1) AS col4; 这样我们就可以把字符串“abc,d,efg,hijk”拆分成四个部分。其,SUBSTRING_INDEX('abc,d,efg,hijk', ',', 1)返回的是“abc”,即从开头到第一个逗号之间的部分;SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 2), ',', -1)返回的是“d”,即从第一个逗号到第二个逗号之间的部分;SUBSTRING_INDEX(SUBSTRING_INDEX('abc,d,efg,hijk', ',', 3), ',', -1)返回的是“efg”,即从第二个逗号到第三个逗号之间的部分;SUBSTRING_INDEX('abc,d,efg,hijk', ',', -1)返回的是“hijk”,即从最后一个逗号到结尾之间的部分。 当然,如果我们的字符串有更多的部分需要拆分,则需要对以上语句进行相应的修改。总之,使用MySQL提供的字符串函数,我们可以轻松地拆分多个列,方便地进行数据处理。