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

mysql 字符串分割,转换为列

本文个人博客地址:https://www.leafage.top/posts/detail/21287YXM

在工作中,偶尔会遇到这样的情况,某系统数据库中,存储关联数据不是通过关联表,而是通过存储关联数据的某个唯一标识符号,且一对多的时候,使用逗号或者其他符号分隔,例如"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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值