正则表达式使用一例
2011-06-16 08:58 Tracy. 阅读(364) 评论(0) 收藏 举报如何用正则表达式实现这样的需求
通过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 
本文来自博客园,作者:Tracy.,转载请注明原文链接:https://www.cnblogs.com/tracy/archive/2011/06/16/2082308.html
                    
                
                
            
        
浙公网安备 33010602011771号