1.使用正则表达式进行排重
SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS col
FROM dual
查询结果:
SQL> SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS col
2 FROM dual
3 ;
COL
--------
2,3,4,5
可以对字符串进行排重
2. 使用上面的正则表达式对listagg进行排重
SELECT listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno) deptno,
regexp_replace((listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno)), '([^,]+)(,\1)+', '\1') bl_number
FROM scott.emp t
执行结果:
SQL> SELECT listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno) deptno,
2 regexp_replace((listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno)), '([^,]+)(,\1)+', '\1') bl_number
3 FROM scott.emp t
4 ;
DEPTNO BL_NUMBER
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
10,10,10,20,20,20,20,20,30,30,30,30,30,30 10,20,30
成功对listagg排重。