MySQL 字串拆分(含分隔符的字串擷取)

2021-08-23 12:21:58 字數 3413 閱讀 8603

題目要求

資料庫中 num字段值為:

實現的效果:需要將一行資料變成多行

實現的sql

select 

substring_index(substring_index('7654,7698,7782,7788',',',help_topic_id+1),',',-1) as num

from

mysql.help_topic

where

help_topic_id < length('7654,7698,7782,7788')-length(replace('7654,7698,7782,7788',',',''))+1

涉及的知識點

一、字串拆分: substring_index(str, delim, count)

引數解說

引數名解釋str

需要拆分的字串

delim

分隔符,通過某字元進行拆分

count

當 count 為正數,取第 n 個分隔符之前的所有字元; 當 count 為負數,取倒數第 n 個分隔符之後的所有字元。

2. 舉例

(1)獲取第2個以「,」逗號為分隔符之前的所有字元。

substring_index('7654,7698,7782,7788',',',2)
(2)獲取倒數第2個以「,」逗號分隔符之後的所有字元

substring_index('7654,7698,7782,7788',',',-2)
二、替換函式:replace( str, from_str, to_str)引數解說

引數名解釋str

需要進行替換的字串

from_str

需要被替換的字串

to_str

需要替換的字串

2. 舉例

(1)將分隔符「,」逗號替換為「」空。

三、獲取字串長度:length( str )引數解說

引數名解釋str

需要計算長度的字串

2. 舉例

(1)獲取 『7654,7698,7782,7788』 字串的長度

實現的sql解析

select 

substring_index(substring_index('7654,7698,7782,7788',',',help_topic_id+1),',',-1) as num

from

mysql.help_topic

where

help_topic_id < length('7654,7698,7782,7788')-length(replace('7654,7698,7782,7788',',',''))+1

此處利用 mysql 庫的 help_topic 表的 help_topic_id 來作為變數,因為 help_topic_id 是自增的,當然也可以用其他表的自增欄位輔助。

help_topic 表:

實現步驟:

step1:首先獲取最後需被拆分成多少個字串,利用 help_topic_id 來模擬遍歷 第n個字串。

涉及的**片段:

step2:根據「,」逗號來拆分字串,此處利用 substring_index(str, delim, count) 函式,最後把結果賦值給 num 字段。

涉及的**片段:

substring_index(substring_index('7654,7698,7782,7788',',',help_topic_id+1),',',-1) as num
第一步:

以」,」逗號為分隔符,根據 help_topic_id 的值來擷取第n+1個分隔符之前所有的字串。 (此處 n+1 是因為help_topic_id 是從0開始算起,而此處需從第1個分隔符開始獲取。)

substring_index('7654,7698,7782,7788',',',help_topic_id+1)
eg:

當 help_topic_id = 0時,獲取到的字串 = 7654

當 help_topic_id = 1時,獲取到的字串 = 7654,7698

…(以此類推)

第二步:

以」,」逗號為分隔符,擷取倒數第1個分隔符之後的所有字串。

substring_index(substring_index('7654,7698,7782,7788',',',help_topic_id+1),',',-1)
eg:

根據第一步,當 help_topic_id = 0時,獲取到的字串 = 7654,此時第二步擷取的字串 = 7654

根據第一步,當 help_topic_id = 1時,獲取到的字串 = 7654,7698,此時第二步擷取的字串 = 7698

…(以此類推)

最終成功實現了以下效果 ~

注:不含分隔符的字串拆分可參考 mysql——字串拆分(無分隔符的字串擷取)

字串拆分,根據指定分隔符拆分字串

有時需要根據指定內容,完成對字串的拆分,針對這個需求,將字串函式進行整合,完成了拆分字串的功能 比如 我們有一組資料 splitxxlinexxtoxxarray 中間有固定分隔字串xx,執行下面子函式,就能獲得字串資料 split line to array。注意 拆分完成的字串陣列是由此函式完成...

4 1拆分含有多種分隔符的字串

coding utf 8 實際案例 我們要某個字串一句分隔符號拆分不同的字段,該字串包含多種不同的分隔符,例如 s ab cd efg hi,jkl mn topq rst,uvw txyz 其中 t 都是分隔符號,如何處理?解決方案 方法一 連續使用str.split 方法,每次處理一種分隔符號....

8 拆分含有多種分隔符的字串

例如,某個字串包含多種不同的分隔符,如 s ab cd efg hi,jkl mn topq rst,uvw txyz 其中,t都是分隔符號。要求 把該字串根據分隔符號拆分不同的字段。解決方案 連續使用字串的split 方法,每次處理一種分隔符號 使用正規表示式的re.split 方法 推薦 t t...