mysql 中实现split功能,然后实现两个类似list集合的求并集的操作

查询语句:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值