mysql逗號(hào)分隔的一行數(shù)據(jù)轉(zhuǎn)為多行數(shù)據(jù)的兩種方法
原表:

結(jié)果:

方法一:如果每條數(shù)據(jù)的被逗號(hào)分隔的數(shù)量在637條以內(nèi),使用 mysql.help_topic(mysql自帶的表,只有637個(gè)序號(hào))。
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)
方法二:如果逗號(hào)數(shù)量在636個(gè)以外,并且原表行數(shù)超過(guò)逗號(hào)分隔的數(shù)量。
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.會(huì)忽略null值。2.(重要)假設(shè)原表中只有2行數(shù)據(jù),但是其中一個(gè)字符串被逗號(hào)分割為大于2條的數(shù)據(jù),那么 split 所在的那條數(shù)據(jù)就只會(huì)拆分出前2條數(shù)據(jù)。
邏輯解釋:
1.length(a.enclosure_ids)-length(REPLACE(a.enclosure_ids,‘,’,‘’))+1
字段原長(zhǎng)度 - 字段去除掉逗號(hào)的長(zhǎng)度 + 1,得到通過(guò)逗號(hào)分割后有幾條數(shù)據(jù)。
2.SUBSTRING_INDEX(SUBSTRING_INDEX(a.enclosure_ids,‘,’,b.help_topic_id+1),‘,’,-1)
里面的SUBSTRING_INDEX是從每個(gè)逗號(hào)循環(huán)截取字符串,如下

外面的SUBSTRING_INDEX是根據(jù)里面的數(shù)據(jù)取最后一個(gè)逗號(hào)后面的數(shù)據(jù)。

到此這篇關(guān)于mysql逗號(hào)分隔的一行數(shù)據(jù)轉(zhuǎn)為多行數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)mysql逗號(hào)分隔轉(zhuǎn)為多行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql數(shù)據(jù)庫(kù)delete操作沒(méi)報(bào)錯(cuò)卻刪除不了數(shù)據(jù)的解決
本文主要介紹了Mysql數(shù)據(jù)庫(kù)delete操作沒(méi)報(bào)錯(cuò)卻刪除不了數(shù)據(jù)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
linux下啟動(dòng)或者關(guān)閉MySQL數(shù)據(jù)庫(kù)的多種方式
,在Linux服務(wù)器上管理MySQL服務(wù)是一個(gè)基本的運(yùn)維任務(wù),下面這篇文章主要給大家介紹了關(guān)于linux下啟動(dòng)或者關(guān)閉MySQL數(shù)據(jù)庫(kù)的多種方式,文中通過(guò)代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
MySQL中DATE_FORMAT()函數(shù)將Date轉(zhuǎn)為字符串
時(shí)間、字符串、時(shí)間戳之間的互相轉(zhuǎn)換很常用,下面這篇文章主要給大家介紹了關(guān)于MySQL中DATE_FORMAT()函數(shù)將Date轉(zhuǎn)為字符串的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
MySQL 通過(guò)索引優(yōu)化含ORDER BY的語(yǔ)句
合理的建立索引能夠加速數(shù)據(jù)讀取效率,不合理的建立索引反而會(huì)拖慢數(shù)據(jù)庫(kù)的響應(yīng)速度。2010-03-03
Mysql數(shù)據(jù)庫(kù)性能優(yōu)化二
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)性能優(yōu)化二 的相關(guān)資料,需要的朋友可以參考下2016-04-04
MySQL中TIMESTAMP類型返回日期時(shí)間數(shù)據(jù)中帶有T的解決
這篇文章主要介紹了MySQL中TIMESTAMP類型返回日期時(shí)間數(shù)據(jù)中帶有T的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
SQL中row_number()?over(partition?by)的用法說(shuō)明
這篇文章主要介紹了SQL中row_number()?over(partition?by)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
MySQL?數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)
這篇文章主要介紹了MySQL?數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),它是一類更具體的可以管理數(shù)據(jù)的軟件。但是實(shí)現(xiàn)數(shù)據(jù)庫(kù)的這個(gè)軟件,需要用到很多的數(shù)據(jù)結(jié)構(gòu),下面來(lái)看看文章是怎么具體介紹這個(gè)數(shù)據(jù)庫(kù)的2021-12-12

