最近在一个项目中用到了listagg方法,但是在组合结果中出现有重复的情况。默认的结果如下
于是我就写了一个方法对listagg的结果去重,也可以对该格式的字符串去重,方法如下
create or replace function listaggpure(targetStr varchar2,seperator varchar2:=',')
return varchar2 is
Rslt varchar2(32767);
begin
select listagg(str,seperator) within group (order by 1 asc) elist into Rslt
from (select distinct regexp_substr(t1.targetstr,'[^'||seperator||']+',1,level) str
from (select targetStr from dual) t1
connect by level<regexp_count(t1.targetstr,'[^'||seperator||']+',1)+1);
return(Rslt);
end listaggpure;
使用该方法对listagg结果去重就达到了想要的效果了,如下图