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