处理Mysql中字段分割字符串( 一行转多行 )问题

该博客介绍了一种使用SQL进行数据处理的方法,涉及字符串截取、拼接和删除操作。通过示例展示了如何利用mysql.help_topic表中的连续数列进行数据筛选,并将处理后的结果插入原表,最后根据关键字删除原数据。此方法适用于需要对含有分隔符的数据进行操作的场景。
摘要由CSDN通过智能技术生成

原数据如下:

原

需要的结果:

处理

sql实现:

此为查询语句结果,将查询结果写入原表,然后根据关键字检索删除原数据即可
如若不懂可看文章结尾

SELECT
    a.id,
    a.name,
    SUBSTRING_INDEX( SUBSTRING_INDEX( a.str, ';', b.help_topic_id + 1 ), ';',- 1 ) AS ids 
FROM
    test AS a
    JOIN mysql.help_topic AS b 
    ON b.help_topic_id < ( length( a.str ) - length( REPLACE ( a.str, ';', '' ) ) + 1 );

如mysql.help_topic: help_topic_id 共有504个数值 它们是mysql内部的连续数列表,连续数列的最大值一定要大于符合分割的值的个数。

mysql 字段截取函数:
1、left(字段名,index) 从左边开始第index开始截取
2、right(字段名,index)从右边开始第index开始截取
3、substring(字段名,index)当index>0从左边开始截取直到结束 当index<0从右边开始截取直到结束 当index=0返回空
4、substring(字段名,index,len)从index开始,截取len长度
5、substring_index(字段名,str,count),str是截取的字段 count是从哪里开始截取(0
从左边第0个开始,-1从右边第一个开始)*
替换原数据

#在查询语句上方加入插入语句即可,但要注意插入的列要与查询出来的列相互对应
insert into test(id,name,str)   
SELECT
    a.id,
    a.name,
    SUBSTRING_INDEX( SUBSTRING_INDEX( a.str, ';', b.help_topic_id + 1 ), ';',- 1 ) AS ids 
FROM
    test AS a
    JOIN mysql.help_topic AS b 
    ON b.help_topic_id < ( length( a.str ) - length( REPLACE ( a.str, ';', '' ) ) + 1 );
#然后再删除原数据即可,此处为检索关键字
DELETE FROM test WHERE str = '爱;不爱';

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值