MySQL查询结果集字符串操作之多行合并与单行分割

2021-11-12  本文已影响0人  随风_d6a2

我们在做项目写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 之后的子串。

  1. 如果 number 是正数,返回第 number 个字符左边的字符串。
SELECT SUBSTRING_INDEX('a*b*c*d*e','*',3);    ---- a*b*c
  1. 如果 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

参考:
https://www.cnblogs.com/likaixin/p/11271756.html

上一篇 下一篇

猜你喜欢

热点阅读