mysql逗号分隔的一行数据转为多行数据的两种方法

 更新时间:2024年11月22日 09:36:23   作者:黑色与白  
本文主要介绍了两种将MySQL中逗号分隔的一行数据转换为多行数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

原表:

在这里插入图片描述

结果:

在这里插入图片描述

方法一:如果每条数据的被逗号分隔的数量在637条以内,使用 mysql.help_topic(mysql自带的表,只有637个序号)。

select a.id,a.enclosure_ids,
       SUBSTRING_INDEX(SUBSTRING_INDEX(a.enclosure_ids,',',b.help_topic_id+1),',',-1) split  
from am_voucher a left join mysql.help_topic b 
ON b.help_topic_id<(length(a.enclosure_ids)-length(REPLACE(a.enclosure_ids,',',''))+1) 

方法二:如果逗号数量在636个以外,并且原表行数超过逗号分隔的数量。

SELECT id,enclosure_ids,
       SUBSTRING_INDEX( SUBSTRING_INDEX( enclosure_ids,',',rownums),',', - 1) AS split 
FROM am_voucher a join 
(SELECT @rownum := @rownum+1 AS rownums FROM (SELECT @rownum :=0) a,am_voucher b) b 
on rownums <= (length(a.enclosure_ids)-length(REPLACE(a.enclosure_ids,',',''))+1) 

弊端:1.会忽略null值。2.(重要)假设原表中只有2行数据,但是其中一个字符串被逗号分割为大于2条的数据,那么 split 所在的那条数据就只会拆分出前2条数据。

逻辑解释:

1.length(a.enclosure_ids)-length(REPLACE(a.enclosure_ids,‘,’,‘’))+1
字段原长度 - 字段去除掉逗号的长度 + 1,得到通过逗号分割后有几条数据。

2.SUBSTRING_INDEX(SUBSTRING_INDEX(a.enclosure_ids,‘,’,b.help_topic_id+1),‘,’,-1)
里面的SUBSTRING_INDEX是从每个逗号循环截取字符串,如下

在这里插入图片描述

外面的SUBSTRING_INDEX是根据里面的数据取最后一个逗号后面的数据。

在这里插入图片描述

到此这篇关于mysql逗号分隔的一行数据转为多行数据的实现的文章就介绍到这了,更多相关mysql逗号分隔转为多行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • MySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • MySQL报错cannot add foreign key constraint的问题解决方法

    MySQL报错cannot add foreign key constraint的问题解决方法

    这篇文章主要介绍了MySQL报错cannot add foreign key constraint的问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • MySQL Slave 触发 oom-killer解决方法

    MySQL Slave 触发 oom-killer解决方法

    这篇文章主要介绍了MySQL Slave 触发 oom-killer解决方法,需要的朋友可以参考下
    2016-07-07
  • Innodb表select查询顺序

    Innodb表select查询顺序

    这篇文章主要介绍了Innodb表select查询顺序的相关资料,需要的朋友可以参考下
    2017-01-01
  • 解析优化MySQL插入方法的五个妙招

    解析优化MySQL插入方法的五个妙招

    本篇文章是对优化MySQL插入方法的五个妙招进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL表的基本查询操作大全(这一篇够了)

    MySQL表的基本查询操作大全(这一篇够了)

    表的增删查改,简称表的 CURD 操作 : Create(创建),Update(更新),Retrieve(读取),Delete(删除),这篇文章主要介绍了MySQL表的基本查询操作,感兴趣的朋友一起看看吧
    2024-02-02
  • sql format()函数的用法及简单实例

    sql format()函数的用法及简单实例

    下面小编就为大家带来一篇sql format函数()的用法及简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • MySQL分区之指定各分区路径详解

    MySQL分区之指定各分区路径详解

    mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,下面这篇文章主要给大家介绍了关于MySQL分区之指定各分区路径的相关资料,需要的朋友可以参考下
    2022-04-04
  • 一文搞定MySQL binlog/redolog/undolog区别

    一文搞定MySQL binlog/redolog/undolog区别

    这篇文章主要介绍了一文搞定MySQL binlog/redolog/undolog区别,作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志,需要的朋友可以参考下
    2023-04-04
  • MySQL之主键索引排序失效问题

    MySQL之主键索引排序失效问题

    这篇文章主要介绍了MySQL之主键索引排序失效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论