关于后端:mysql如何实现split操作

45次阅读

共计 1251 个字符,预计需要花费 4 分钟才能阅读完成。

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

正文完
 0