我正在尋找編寫一個存儲過程,該存儲過程將一個由令牌分隔的字符串作爲參數,然後在過程中爲該字符串中的每個項目運行一個while循環。有沒有類似於mySql中的split()方法?
我沒有看到任何可以完成這項任務的mysql文檔......有沒有辦法做到這一點?
我正在尋找編寫一個存儲過程,該存儲過程將一個由令牌分隔的字符串作爲參數,然後在過程中爲該字符串中的每個項目運行一個while循環。有沒有類似於mySql中的split()方法?
我沒有看到任何可以完成這項任務的mysql文檔......有沒有辦法做到這一點?
不幸的是,mysql不讓函數返回數組或表(我知道),所以你必須做一點這樣做。
下面是一個示例存儲過程:每行
DELIMITER $$
create function splitter_count (str varchar(200), delim char(1)) returns int
return (length(replace(str, delim, concat(delim, ' '))) - length(str)) $$
CREATE PROCEDURE tokenize (str varchar(200), delim char(1))
BEGIN
DECLARE i INT DEFAULT 0;
create table tokens(val varchar(50));
WHILE i <= splitter_count(str, delim) DO
insert into tokens(val) select(substring_index(SUBSTRING_INDEX(str, delim, i+1), delim, -1));
SET i = i + 1;
END WHILE;
END $$
DELIMITER ;
這將令牌化的字符串,值插入到一個名爲「令牌」表,一個令牌。你應該可以修改它來很容易地做一些有用的事情。另外,您可能希望將輸入長度從200增加。
我想你需要推出自己的功能。 SUBSTRING_INDEX會派上用場:
SUBSTRING_INDEX(str,delim,count)
返回從字符串str的分隔符delim中的計數發生前的子字符串。如果count是正數,則返回最後一個分隔符左邊的數字(從左數起)。如果計數爲負數,則返回最後一個分隔符右邊的數字(從右數起)。 SUBSTRING_INDEX()在搜索delim時執行區分大小寫的匹配。
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
該函數是多字節安全的。
我認爲你可以做到你通過substring_index
想要的東西它不只是一個拆分()函數的簡單,但我敢肯定,你可以制定出一個while循環使用此功能。