MySql中指定符號分割並分行展示


1.涉及到的函數三個:

1.1 REPLACE('value','str1','str2')

 用法規則:使用str2替換掉value中的所有的str1;

SELECT REPLACE('我來了','','')

執行結果如下:

 

 1.2 LENGTH(str)

 用法規則:獲取字符串的長度,使用 uft8(UNICODE 的一種變長字符編碼,又稱萬國碼)編碼字符集時,一個漢字是 3 個字節,一個數字或字母是一個字節。

SELECT LENGTH('我來了'),LENGTH('you')

執行結果如下:

 

1.3 SUBSTRING_INDEX(str,delim,count)

 用法規則:substring_index(“待截取有用部分的字符串”,“截取數據依據的字符”,截取字符的位置N(截取數據依據的字符出現的次數))

如果count是正數則從左往右截取,如果count是負數則從右往左截取,count是從1開始的不存在0,否則查詢結果為空;

SELECT SUBSTRING_INDEX('我,是,菜,雞',',',1) 
-- 以第一個逗號為分割,截取第一個字符串

執行結果如下:

SELECT SUBSTRING_INDEX('我,是,菜,雞',',',2)
-- 以第二個逗號為分割,截取前兩個字符串

執行結果如下:

SELECT SUBSTRING_INDEX('我,是,菜,雞',',',-2)
-- 從右往左數第二個逗號為分割,截取兩個字符串

執行結果如下:

 

 

 

案例:

現有一張table1表,表中信息如截圖,需要將表中的roles字段中的值按照‘,’分割,並且每個字符串展示為1行:

 

 

 實現的sql如下:

SELECT
    a.owner_type,SUBSTRING_INDEX( SUBSTRING_INDEX( a.roles, ',', b.help_topic_id + 1 ), ',',- 1 ) 
FROM
    table1 a
    JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.roles ) - LENGTH( REPLACE ( a.roles, ',', '' ) ) + 1 );

執行結果:

 

 

 案例語句分析:

SUBSTRING_INDEX(SUBSTRING_INDEX(a.roles,',',b.help_topic_id + 1),',',-1)

在mysql.help_topic表中help_topic_id的值是(0,1,2······N),是從零開始的,SUBSTRING_INDEX(str,delim,count)中的count位置函數必須是從1開始,所以需要(b.help_topic_id + 1)從1開始循環,當help_topic_id 值為0時以上語句取值為第一個字符串,當help_topic_id 值為1是以上語句執行后取第二個字符串,如截圖:

 

 

以下sql字段執行結果求的是roles的值可以按照 ' , ' 被分割為多少個字符串:

(LENGTH(a.roles) - LENGTH(REPLACE(a.roles,',','')) + 1 )

執行后的結果如截圖:

 

 至於如何使用join進行循環的這里就不多做描述,可以百度下join的使用講解^-^。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM