/*
创建人:DZH
创建日期:20xx-xx
函数作用:剔除数组中重复值
*/
DROP FUNCTION IF EXISTS fun_str_split;
CREATE FUNCTION fun_str_split(str1 varchar(255), str_splie char(2)) RETURNS VARCHAR(255)
BEGIN
declare re_str0 varchar(255);
declare re_str1 varchar(255);
declare i int;
declare j int;
declare k int;
-- 获取特殊出现总次数
set k=length(str1)-length(replace(str1,str_splie,''));
-- 初始化返回值
set re_str0='';
-- 对字符串判断处理
if length(str1)=0 then
set re_str0='';
elseif k=0 then
set re_str0=str1;
else
set i=k+1;
while i>0
do
set i=i-1;
set j=instr(str1,str_splie);
if j=0 then
-- j=0 是最后一个元素时没有特殊字符
set re_str0=concat_ws(str_splie,re_str0,str1);
else
set re_str1=substr(str1,1,j-1);
set str1=substr(str1,j+1);
-- 判断是否存在
if find_in_set(re_str1,re_str0)='' then
set re_str0=concat_ws(str_splie,re_str0,re_str1);
end if;
end if;
-- 清空下个循环重新赋值
set j=0;
set re_str1='';
end while;
end if;
-- 剔除前后可能出现的特殊字符
set re_str0=trim(both str_splie from re_str0);
RETURN re_str0;
END;
/*
创建人:DZH
创建日期:20XX-XX
函数作用:剔除数组个数
*/
DROP FUNCTION IF EXISTS fun_str_split_cunt;
CREATE FUNCTION fun_str_split_cunt(str1 varchar(255), str_splie char(2)) RETURNS int
BEGIN
declare re_str0 varchar(255);
declare i int;
-- 调用fun_str_split 处理异常重复内容
set re_str0=fun_str_split(str1,str_splie);
-- 获取特殊出现总次数
set i=length(re_str0)-length(replace(re_str0,str_splie,''))+1;
RETURN i;
END;