添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
小胡子的薯片  ·  C# ...·  1 年前    · 
焦虑的双杠  ·  c# - Await async ...·  1 年前    · 

本文个人博客地址: www.leafage.top/posts/detai…

mysql 字符串分割,转换为列

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

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

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

  • 先执行基础查询,看看数据存储的格式:
  • 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 
    	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;
    

    执行结果如下:
    分割后

    分类:
    后端
    标签: