在 MySQL 中并没有内置的 split() 函数,但能够通过自定义函数或存储过程来实现字符串宰割。以下是几种实现办法:
自定义函数 fn_split()
:
DROP FUNCTION IF EXISTS fn_split;DELIMITER $$CREATE FUNCTION fn_split(s TEXT, del CHAR(1), i INT)RETURNS VARCHAR(1024)DETERMINISTIC -- always returns same results for same input parametersSQL SECURITY INVOKER BEGIN DECLARE n INT; -- get max number of items SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1; IF i > n THEN RETURN NULL; ELSE RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i), del, -1); END IF;END$$DELIMITER ;
存储过程 splitString()
:
DROP PROCEDURE IF EXISTS `splitString`;DELIMITER $$CREATE PROCEDURE `splitString`(IN f_string VARCHAR(1000), IN f_delimiter VARCHAR(5))BEGIN DECLARE cnt INT DEFAULT 0; DECLARE i INT DEFAULT 0; SET cnt = LENGTH(f_string) - LENGTH(REPLACE(f_string, f_delimiter, '')) + 1; DROP TABLE IF EXISTS temp_split_string; CREATE TEMPORARY TABLE temp_split_string (id INT AUTO_INCREMENT PRIMARY KEY, val VARCHAR(50)); WHILE (i < cnt) DO INSERT INTO temp_split_string (val) SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(f_string, f_delimiter, i + 1), f_delimiter, -1); SET i = i + 1; END WHILE; SELECT * FROM temp_split_string; DROP TABLE IF EXISTS temp_split_string;END$$DELIMITER ;
MySQL中一个很好用的截取字符串的函数:substring_index
substring_index("字符串","宰割符",地位N)
具体阐明:
首先,设待处理对象字符串为"1,2,3,4,5",这里截取的根据是逗号:",",具体要截取第N个逗号前局部的字符。
意思是:在字符串中以逗号为索引,获取不同索引位的字符。
select substring_index("1,2,3,4,5",',',2)-- 1,2
本文由mdnice多平台公布