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

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

作者: 随风_d6a2 | 来源:发表于2021-11-12 00:42 被阅读0次

    我们在做项目写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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/dwdnzltx.html