我们在做项目写sql语句的时候,是否会遇到这样的场景,就是需要把查询出来的多列,按照字符串分割合并成一列显示,或者把存在数据库里面用逗号分隔的一列,查询分成多列呢,常见场景有,文章标签,需要吧查询多个标签合并成一列,等,需要怎么去实现呢,这就涉及到MySQL的字符串操作
多行合并
group_concat
场景再现 我想把查询多列数据合并成一列显示用逗号分隔就需要用到group_concat这个函数。
SQL如下:
select dept.deptno,GROUP_CONCAT(emp.ename)
from dept
left join emp ON(dept.deptno = emp.deptno)
where dept.deptno = 10
select dept.deptno,GROUP_CONCAT(emp.ename)
from dept
left join emp ON(dept.deptno = emp.deptno)
GROUP BY dept.deptno
单行分割
单行分割我们可以利用一下help_topic,help_topic表是数据库mysql下的一个表。
image
SUBSTRING_INDEX(s, delimiter, number)
返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
- 如果 number 是正数,返回第 number 个字符左边的字符串。
SELECT SUBSTRING_INDEX('a*b*c*d*e','*',3); ---- a*b*c
- 如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1);
数据:
image.png
SQL:
select a.id, a.username,
substring_index(substring_index(a.course, '|', b.help_topic_id + 1), '|', -1) course
from student a JOIN mysql.help_topic b
ON b.help_topic_id < (length(a.course) - length(REPLACE(a.course, '|', '')) + 1);
image.png
网友评论