mysql字串拆分實現split功能

2022-07-07 03:24:18 字數 2684 閱讀 9152

目錄

有分隔符的字串拆分

資料庫中 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

涉及的知識點

引數解說     解釋

str     需要拆分的字串

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

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

舉例 

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

substring_index('7654,7698,7782,7788',',',2)

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

substring_index('7654,7698,7782,7788',',',-2)

引數名     解釋

str       需要進行替換的字串

from_str   需要被替換的字串

to_str     需要替換的字串

2. 舉例 

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

replace('7654,7698,7782,7788',',','')

引數名   解釋

str     需要計算長度的字串

舉例

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

length('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個字串。

涉及的**片段:

help_topic_id < length('7654,7698,7782,7788')-length(replace('7654,7698,7782,7788',',',''))+1
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——字串拆分(無分隔符的字串擷取)

---------------------

**:

mysql拆分字串

函式 1 從左開始擷取字串 left str,length 說明 left 被擷取字段,擷取長度 例 select left make date,4 as year from t sale billing where make date 2017 06 24 2 從右開始擷取字串 right str...

mysql拆分字串函式

業務需求 拆分字串,然後將數字轉換成中文描述,返回成以,分割的中文描述 修改結束符,防止在mysql命令列中預設分號直接執行 delimiter 建立乙個計算拆分後字串的個數函式 drop function if exists calc length create function calc len...

拆分字串

拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...