MySql中指定符号分割并分⾏展⽰
1.涉及到的函数三个:
1.1 REPLACE('value','str1','str2')
⽤法规则:使⽤str2替换掉value中的所有的str1;字符串长度规则
SELECT REPLACE('我来了','来','⾛')
执⾏结果如下:
1.2 LENGTH(str)
⽤法规则:获取字符串的长度,使⽤ uft8(UNICODE 的⼀种变长字符编码,⼜称万国码)编码字符集时,⼀个汉字是 3 个字节,⼀个数字或字母是⼀个字节。SELECT LENGTH('我来了'),LENGTH('you')
执⾏结果如下:
1.3 SUBSTRING_INDEX(str,delim,count)
⽤法规则:substring_index(“待截取有⽤部分的字符串”,“截取数据依据的字符”,截取字符的位置N(截取数据依据的字符出现的次数))
如果count是正数则从左往右截取,如果count是负数则从右往左截取,count是从1开始的不存在0,否则查询结果为空;
SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',1)
-- 以第⼀个逗号为分割,截取第⼀个字符串
执⾏结果如下:
SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',2)
-
- 以第⼆个逗号为分割,截取前两个字符串
执⾏结果如下:
SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',-2)
-- 从右往左数第⼆个逗号为分割,截取两个字符串
执⾏结果如下:
案例:
现有⼀张table1表,表中信息如截图,需要将表中的roles字段中的值按照‘,’分割,并且每个字符串展⽰为1⾏:
实现的sql如下:
SELECT
a.owner_type,SUBSTRING_INDEX( SUBSTRING_INDEX( a.roles, ',',
b.help_topic_id +1 ), ',',-1 )
FROM
table1 a
JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.roles ) - LENGTH( REPLACE ( a.roles, ',', '' ) ) +1 );
执⾏结果:
案例语句分析:
SUBSTRING_INDEX(SUBSTRING_les,',',b.help_topic_id +1),',',-1)
在mysql.help_topic表中help_topic_id的值是(0,1,2······N),是从零开始的,SUBSTRING_INDEX(str,delim,count)中的count位置函数必须是从1开始,所以需要(b.help_topic_id + 1)从1开始循环,当help_topic_id 值为0时以上语句取值为第⼀个字符串,当help_topic_id 值为1是以上语句执⾏后取第⼆个字符串,如截图:
以下sql字段执⾏结果求的是roles的值可以按照 ' , ' 被分割为多少个字符串:
(les) - LENGTH(les,',','')) +1 )
执⾏后的结果如截图:
⾄于如何使⽤join进⾏循环的这⾥就不多做描述,可以百度下join的使⽤讲解^-^。。。。。。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论