查询语句:
select splitFun('$#_a1$#_a2$#_a3$#_','$#_b1$#_b2$#_a1$#_','$#_') from dual;
然后返回结果为:$#_a1$#_a2$#_a3$#_b1$#_b2$#_
存储过程:
CREATE DEFINER=`pnggu`@`%` FUNCTION `splitFun`(community_str varchar(10000),community_mid_str varchar(10000), split_str VARCHAR(10) ) RETURNS varchar(10000) CHARSET utf8mb4
BEGIN
-- 功能说明:处理小区别名用到,【地址别名最好不要用,因为地址中有逗号分隔】
-- 具体说明:community_str为community表中的小区名称字段值,例如:'$#_a1$#_a2$#_a3$#_'
-- community_mid_str为表community_mid中的小区别名字段值,例如:'$#_b1$#_a2$#_b3$#_'
-- split_str为分隔符,本例中为:'$#_'
-- 经过调用此函数最终输出结果应该为:'$#_a1$#_a2$#_a3$#_b1$#_b3$#_' 即两个list集合的并集
-- 参数说明:community_str是community表中的自动值,community_mid_str是community_mid中的字段值,split_str是分隔符,在这里小区别名分隔符为'$#_'
declare i int;
-- 声明临时变量:用于存放community_mid_str中获取的各个值
declare temp_str VARCHAR(1000);
-- set temp_str = '';
-- 声明循环次数变量
declare num int;
-- 设置循环变量
set i=0;
-- 先将community_mid_str中的"$#_"替换成","
set community_mid_str = replace(community_mid_str,split_str,',');
-- 得到需要循环的次数
set num = length(community_mid_str)-length(replace(community_mid_str, ',', '')) - 1;
IF num > 0 THEN
WHILE i<num DO
set temp_str = reverse(substring_index(reverse(substring_index(community_mid_str,',', (i+2))),',',1));
IF FIND_IN_SET(temp_str,replace(community_str,split_str,',')) THEN
set community_str = community_str;
ELSE
set community_str = CONCAT(community_str,temp_str,split_str);
END IF;
set i=i+1;
END WHILE;
ELSE
set num = num + i;
END IF;
RETURN community_str;
END