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

【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折      
[公益] 地球是我家,绿化靠大家      
2025年 春 节 005
2025年 高 考 134
2025年 春 节 005
2026年 元 旦 342
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
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
点  击:28
录  入:星儿
相关文章
Baidu
YiJiaCMS 7.5.5 build241121(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,创宇云安全提供加速防护
运行时间载入中.....
知道创宇云安全