在 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 parameters
SQL 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 多平台公布