正则表达式使用一例

如何用正则表达式实现这样的需求

通过wm_concat()函数得到了这样的结果:
'014,014,018,022,317,319,023,021'
如何继续排序和去重复呢?
期望结果:'014,018,021,022,023,317,319'
测试数据:
select '014,014,018,022,317,319,023,021' from dual;
wm_concat集合函数在plsql中不能加distinct关键字,在sql中执行没事。
有三种方式屏蔽:
1、改为sql串,动态执行;
2、定义视图;
3、先 distinct ,套一层在wm_concat。
由于原sql比较复杂,不想改写,打算通过下面两个思路解决:
1、写个去重复排序函数解决这个问题。
2、想用正则表达式实现。
对于正则表达式,大家有没有好的思路?

------------------------------------------Answer--------------------------------------------------------

with a as (
  select '014,014,018,022,317,319,023,021,026,023' line from dual
) ,
b as (
  select distinct regexp_substr(a.line,'[^,]+',1,level) token
  from a
  connect by level<=
    (select length(rtrim(a.line,','))-length( replace(a.line,',','') ) +1 from a )
)
select wmsys.wm_concat(token) distinct_line
from b

原文地址:https://www.cnblogs.com/tracy/p/2082308.html