戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

利用MySQL存储过程分割字符串

日期:2015年11月20日 作者: 分类:数据库 阅读:797

MySQL存储过程可用于分割字符串,现有一段字符串,如:”12,14,17,19″,要把它按逗号(,)分割,然后用于SQL中的 where in 条件查询。

1. 计算可分割成多少个字符串(func_split_strlen)

DELIMITER $$
DROP FUNCTION IF EXISTS `func_split_strlen`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `func_split_strlen`(
    f_string varchar(200),  -- 传入字符串
    f_delimiter varchar(5)  -- 分割符
) RETURNS int(11)
begin
    return 1+( length(f_string) - length(replace(f_string,f_delimiter, '')) );
end $$
DELIMITER ;

2. 拆分字符串函数(func_split)

DELIMITER $$
DROP FUNCTION IF EXISTS `func_split`$$
-- 功能:从 f_string 中以 f_delimiter 提取第 f_order 个字符
CREATE DEFINER=`root`@`localhost` FUNCTION `func_split`(
    f_string varchar(200),   -- 传入字符串
    f_delimiter varchar(5),  -- 分割符
    f_order int              -- 分割
) RETURNS varchar(255) CHARSET utf8  -- 返回字符串
begin
    declare result varchar(255) default '';
    set result = reverse(
        substring_index(
            reverse(substring_index(f_string,f_delimiter,f_order)),
            f_delimiter,
            1
        )
    );
    return result;
end $$
DELIMITER ;

3. 存储过程编写(sp_split_str)

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_split_str` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_split_str`(
    IN f_string varchar(1000), -- 要分割的字符串
    IN f_delimiter varchar(5)  -- 分割符
)
BEGIN 
declare cnt int default 0; 
declare i int default 0; 
set cnt = func_split_strlen(f_string, f_delimiter);
DROP TABLE IF EXISTS `tmp_split`; 
create temporary table `tmp_split`(
    `strs` varchar(128) not null
) DEFAULT CHARSET=utf8; 
while i < cnt 
do 
    set i = i + 1; 
    insert into tmp_split(`strs`) values (
        reverse(substring_index(
            reverse(substring_index(f_string,f_delimiter,i)),
            f_delimiter,
            1)
        )
    ); 
end while; 
END $$
DELIMITER ;

4. 测试功能

利用MySQL存储过程分割字符串

标签:,

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/1093.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注