- 准备表
创建表student_name
create table student_name
(
name varchar(20)
);
插入模拟数据
insert into student_name(name) values('小红,小黄,小蓝'),('小绿,小青,小靛,小紫');
- 如图
- 通过sql完成水平拆分
select distinct
SUBSTRING_INDEX(SUBSTRING_INDEX(a.`name`,',',b.help_topic_id + 1),',', -1 ) name
from student_name a
join mysql.help_topic b
on b.help_topic_id < (LENGTH(a.name) - length(replace(a.name,',','')) + 1)
用法规则:
substring_index(“待截取字符串”,“截取数据依据的字符”,截取字符的位置N)
mysql.help_topic 【mysql 默认自增序列表,如果没有看到mysql数据库因为没有权限访问】
例子:str=“blog.csdn.net/Charles_Timber”
substring_index(str,'.',1)
结果是:blog
substring_index(str,'.',2)
结果是:blog.csdn
也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容
相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:
substring_index(str,'.',-2)
结果为:csdn.net/Charles_Timber
有人会问,如果我要中间的的 csdn 怎么办?
很简单的,两个方向:
从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:
substring_index(substring_index(str,'.',-2),'.',1)
- 查询结果
注意:如果要求拆分成多行必选要关联mysql自增表格