您正在使用 IPV4 [18.97.14.80] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]保护绿色环境,构建和谐社会      

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中      
【腾讯云】618年中盛惠,2核2G5M云服务器低至 68元/年       [公益] 地球是我家,绿化靠大家       广州婚姻调查公司      
2025年 七夕节 077
2025年 教师节 089
2026年 元 旦 202
2026年 春 节 249
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
mysql逗号分隔的一行数据转为多行数据的两种方法
内容摘要: 方法一:如果每条数据的被逗号分隔的数量在637条以内,使用mysql.help_topic(mysql自带的表,只有637个序号)。selecta.id,a.enclosure_ids,SUBSTRING_INDEX(SUBSTRING_INDEX(a.enclosure_ids,',',b.help_topic_id+1),',',-1)splitfrom......
方法一:如果每条数据的被逗号分隔的数量在637条以内,使用mysql.help_topic(mysql自带的表,只有637个序号)。

selecta.id,a.enclosure_ids,

SUBSTRING_INDEX(SUBSTRING_INDEX(a.enclosure_ids,',',b.help_topic_id+1),',',-1)split

fromam_voucheraleftjoinmysql.help_topicb

ONb.help_topic_id<(length(a.enclosure_ids)-length(REPLACE(a.enclosure_ids,',',''))+1)

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

SELECTid,enclosure_ids,

SUBSTRING_INDEX(SUBSTRING_INDEX(enclosure_ids,',',rownums),',',-1)ASsplit

FROMam_voucherajoin

(SELECT@rownum:=@rownum+1ASrownumsFROM(SELECT@rownum:=0)a,am_voucherb)b

onrownums<=(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日期ATE、TIME、DATETIME、TIMES

发布日期:2024/11/24
手机扫二维码直达本页
发布时间:22:50:35
点  击:9
录  入:星儿
相关文章
Baidu
YiJiaCMS 7.5.8 build250610(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,创宇云安全提供加速防护
运行时间载入中.....
知道创宇云安全