MySQL分割字符串一行轉(zhuǎn)多行的實(shí)現(xiàn)方法
需求
MySQL中,某個(gè)字段通過分隔符保存了多個(gè)字符串,如下:
需要將字段中的字符串分成不同的行,如下:
用到的知識(shí)
MySQL提供了一系列字符串處理函數(shù)
1、left(str, len)
:從左邊開始截取指定長(zhǎng)度
2、right(str, len)
:從右邊開始截取指定長(zhǎng)度
3、substring(str, pos)
:從第pos個(gè)字符開始截?。ㄗ⒁鈴?開始計(jì)數(shù))
- 當(dāng)pos為正數(shù):從左往右數(shù)第pos個(gè)
- 當(dāng)pos為負(fù)數(shù):從右往左數(shù)第pos個(gè)
比如pos為-2,字符串為"a,b,c",截取結(jié)果為",c"
4、substring(str, pos, len)
:從第pos個(gè)字符開始截取指定長(zhǎng)度(注意從1開始計(jì)數(shù))
5、substring_index(str, delim, count)
:根據(jù)delim分隔符進(jìn)行分割,從頭開始截取到第count個(gè)分隔符之前select id, substring_index("a,b,c", ',', 2) from test_split;
截取到第二個(gè)分隔符之前
最終實(shí)現(xiàn)
實(shí)現(xiàn)效果
select b.help_topic_id + 1 as id, substring_index(substring_index(a.name, ',', b.help_topic_id + 1) ,',', -1) as name from test_split a join mysql.help_topic b on b.help_topic_id < LENGTH(a.name) - LENGTH(REPLACE(a.name,',','')) + 1;
一行變成多行,需要借助輔助表,這里選擇mysql.help_topic
mysql.help_topic表的id特點(diǎn)是從0開始遞增,最大為700
1、分割成多少份:LENGTH(a.name) - LENGTH(REPLACE(a.name, ',' , '')) + 1
- length(‘a,b,c’) - length( replace(‘a,b,c’, ‘,’, ‘’) ) + 1 = 5 - 3 + 1 = 3
- 原始長(zhǎng)度 - 去掉分隔符,之后的長(zhǎng)度 = 分隔符數(shù)量
- 分隔符數(shù)量 + 1 = 被分割的數(shù)量
2、獲取分割之后的每一份字符串
2.1、substring_index(a.name, ',', b.help_topic_id + 1)
:隨著help_topic_id
增加,截取的字符串依次增加,“a”、“a,b”、“a,b,c”……
2.2、substring_index(str, ',' , -1)
:獲取str按分隔符分割之后的最后一個(gè)字符串substring_index(substring_index(a.name, ',', b.help_topic_id + 1) , ',', -1)
由2.1可知,隨著help_topic_id
增加,依次獲取"a" “b” “c”……
參考鏈接
http://www.dbjr.com.cn/article/248795.htm
到此這篇關(guān)于MySQL分割字符串一行轉(zhuǎn)多行的文章就介紹到這了,更多相關(guān)MySQL分割字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析mysql 共享表空間與獨(dú)享表空間以及他們之間的轉(zhuǎn)化
本篇文章是對(duì)mysql 共享表空間與獨(dú)享表空間以及他們之間的轉(zhuǎn)化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySQL 配置優(yōu)化(多個(gè)參數(shù))
安裝MySQL后,配置文件my.cnf在 /MySQL安裝目錄/share/mysql目錄中,該目錄中還包含多個(gè)配置文件可供參考,有my-large.cnf ,my-huge.cnf, my-medium.cnf,my-small.cnf,分別對(duì)應(yīng)大中小型數(shù)據(jù)庫應(yīng)用的配置。win環(huán)境下即存在于MySQL安裝目錄中的.ini文件2016-05-05設(shè)置MySQL自動(dòng)增長(zhǎng)從某個(gè)指定的數(shù)開始方法
下面小編就為大家?guī)硪黄O(shè)置MySQL自動(dòng)增長(zhǎng)從某個(gè)指定的數(shù)開始方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01MySQL使用mysqldump實(shí)現(xiàn)數(shù)據(jù)完全備份
mysqldump是MySQL自帶的備份工具,可方便實(shí)現(xiàn)對(duì)MySQL的備份,也可以將指定的庫、表導(dǎo)出為SQL腳本,下面小編就來教大家如何使用mysqldump實(shí)現(xiàn)數(shù)據(jù)完全備份吧2023-07-07Druid數(shù)據(jù)庫連接池的jar包的使用方式
這篇文章主要介紹了Druid數(shù)據(jù)庫連接池的jar包的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Linux如何添加mysql系統(tǒng)環(huán)境變量
這篇文章主要介紹了Linux如何添加mysql系統(tǒng)環(huán)境變量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04mysql數(shù)據(jù)表規(guī)模九千萬條記錄?如何優(yōu)化查詢?
這里的優(yōu)化維度有四個(gè):硬件配置、參數(shù)配置、表結(jié)構(gòu)設(shè)計(jì)和SQL語句及索引,需要的朋友可以參考下2023-12-12