如何实现 mysql 字符串分割,列转行,行转列

1. mysql 字符串分割,将列转换为行

在工作中,偶尔会遇到这样的情况,某系统数据库中,存储关联数据不是通过关联表,而是通过存储关联数据的某个唯一标识符号,且一对多的时候,使用逗号或者其他符号分隔,例如"1,2,36"这样的格式,但是查询的时候需要此字段作为条件进行过滤,那就需要将这个字段的值转换为多个记录行的形式,那怎么来做呢?

首先,要实现这样的功能,需要借助mysql默认提供的一张表来辅助完成,这个表的名字是:help_topic,另外需要借助一些mysql提供的函数:length(str),substring_index(str, ‘分隔符’, {第几个分隔符}),replace(str, ‘要被替换的’ , ‘替换后的’) 来进行;

具体的操作如下示例,后面在进行详细的说明:

  1. 先执行基础查询,看看数据存储的格式:
select role_ids from t_user where id = 3;

执行结果如下:
分割处理前
2. 再来执行将该字段的值转换成多个记录行的语句:

SELECT
    SUBSTRING_INDEX( SUBSTRING_INDEX( u.role_ids, ',', ht.help_topic_id + 1 ), ',', -1 ) AS roleId 
FROM
    t_user u
    INNER JOIN mysql.help_topic ht ON ht.help_topic_id < ( LENGTH( role_ids ) - LENGTH( REPLACE ( role_ids, ',', '' )) + 1 ) 
WHERE
    id = 3;

执行结果如下:
分割后

2. mysql 行转为列,字符串分割

将同一列的多行数据转换为一个字符串分割的数据,使用MySQL提供的函数,可以方便的实现:

select group_id, GROUP_CONCAT(id) as ids from t_user group by group_id;
Technology 8/6/2022, 11:22:56 AM
3822
0
7
列转行字符串分割group_concat行专列mysqlsql
如有帮助,点赞鼓励一下吧!