分隔效果
-- 分隔前
1,2,3,4
-- 分隔后
1
2
3
4
分隔命令行
1
2
3
4
5
6
|
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 < 獲取分隔后的總行數
1
|
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 沒有權限,可以自己創建一張臨時表,用來與要查詢的表連接查詢。
獲取該字段最多可以分割成為幾個字符串:
1
|
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根據逗號拆分內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_42526326/article/details/121899974