mysql根據逗號將一行數據拆分成多行數據
分隔效果
— 分隔前
1,2,3,4
— 分隔後
1
2
3
4
分隔命令行
SELECT substring_index(substring_index('1,2,3,4',',', b.help_topic_id + 1), ',', -1) result FROM mysql.help_topic b where b.help_topic_id < (LENGTH('1,2,3,4') - LENGTH(REPLACE('1,2,3,4', ',', '')) + 1);
命令行解釋
help_topic本身是Mysql一個幫助解釋註釋表,用於解釋Mysql各種專有名詞,由於這張表數據ID是從0順序增加的,方便我們用於計數,但是8.0.17版本的隻有686條數據,超過這個數字,我們就需要己自定義一張表
可以用做計數的臨時表,查詢的語句隻會用help_topic計數,超出的部分其實都是臟數據
b.help_topic_id < 獲取分隔後的總行數
b.help_topic_id < (LENGTH('1,2,3,4') - LENGTH(REPLACE('1,2,3,4', ',', '')) + 1)
這個語句其實是一個遍歷,help_topic_id 從0開始遞增到
按照順序截取,先截取第 n 個分隔符之前的所有字符,再截取字符串最後一位
1 —— 1
1,2 —— 2
1,2,3 —— 3
1,2,3,4 —— 4
mysql.help_topic 無權限處理辦法
mysql.help_topic 的作用是對 SUBSTRING_INDEX 函數出來的數據(也就是按照分割符分割出來的)數據連接起來做笛卡爾積。
如果 mysql.help_topic 沒有權限,可以自己創建一張臨時表,用來與要查詢的表連接查詢。
獲取該字段最多可以分割成為幾個字符串:
SELECT MAX(LENGTH(a.`name`) - LENGTH(REPLACE(a.`name`, ',', '' )) + 1) FROM `test` a;
創建臨時表,並給臨時表添加數據:
註意:
- 臨時表必須有一列從 0 或者 1 開始的自增數據
- 臨時表表名隨意,字段可以隻有一個
- 臨時表示的數據量必須比 MAX(LENGTH(a.name) – LENGTH(REPLACE(a.name, ‘,’, ” )) + 1) 的值大
涉及函數
substring_index(str,delim,count)
參數名 | 解釋 |
---|---|
str | 需要拆分的字符串 |
delim | 分隔符,通過某字符進行拆分 |
count | 當 count 為正數,取第 n 個分隔符之前的所有字符; 當 count 為負數,取倒數第 n 個分隔符之後的所有字符。 |
replace( str, from_str, to_str)
參數名 | 解釋 |
---|---|
str | 需要進行替換的字符串 |
from_str | 需要被替換的字符串 |
to_str | 需要替換的字符串 |
length(str) 獲取字符串長度
到此這篇關於mysql根據逗號將一行數據拆分成多行數據的文章就介紹到這瞭,更多相關mysql根據逗號拆分內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MySql字符串拆分實現split功能(字段分割轉列)
- MySQL查詢字段實現字符串分割split功能的示例代碼
- MySQL 字符串拆分操作(含分隔符的字符串截取)
- MySQL 十大常用字符串函數詳解
- mysql中截取字符串的6個函數講解