1. 程式人生 > 其它 >mysql如何將字串以“,”分割轉變為列資料?目標:放入SQL語句in()裡面!

mysql如何將字串以“,”分割轉變為列資料?目標:放入SQL語句in()裡面!

技術標籤:Java操作MySQL

1.效果:

原本字串:在這裡插入圖片描述轉成列資料在這裡插入圖片描述

2.SQL語句

SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(aa.pid,',',help_topic_id+1),',',-1) AS num 
FROM 
    mysql.`help_topic`,(#查詢pid字串的SQL語句
    ) AS aa
WHERE 
    help_topic_id <= LENGTH(aa.pid)-LENGTH(REPLACE(aa.pid,',',''))
    

3.相應知識點:

3.1 MySQL替換字串
replace(字串,要替換的字元,新字元)

3.2 MySQL取字串長度
常用的取長度函式有char_length()、length()、bit_length()
char_length() 返回字元個數,一箇中文或英文字元返回都是1
length() 字元在當前編碼下儲存,所佔的位元組數
bit_length() 字元在當前編碼下儲存,所佔的bit,也就是length*8

3.3 substring_index()
substring_index(字串,指定字元,第n次位置),如果指定字元在字串中搜索不到,則返回整個字串
SUBSTRING_INDEX(s, delimiter, number)
返回從字串 s 的第 number 個出現的分隔符 delimiter 之後的子串。(從1開始,所以help_topic_id+1)

二種理解思路分別如下:
   案例1:

#如果 number 是正數,返回第 number 個字元左邊的字串。
SELECT SUBSTRING_INDEX('a*b*c*d*e','*',3);    ---- a*b*c
#如果 number 是負數,返回第(number 的絕對值(從右邊數))個字元右邊的字串。
SELECT SUBSTRING_INDEX('a*b*c','*',-1);    ---- c
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1);  

案例2:

#擷取第二個 ‘.’ 之前的所有字元。
select substring_index(‘www.csdn.com’ ,., 2); www.csdn #擷取第2個 ‘.’ (倒數)之後的所有字元。 select substring_index(‘www.csdn.com’ ,., -2); csdn.com

3.4 help_topic表
help_topic表是資料庫mysql下的一個表(id從0開始)