Oracle字串分隔符替換(替換奇數個或偶數個)
阿新 • • 發佈:2018-12-20
罪惡,,,,居然在圖書館佔位子,,,
標題不知道怎麼寫比較適合,這是群裡面一個小夥伴問我的問題,一番折騰後感覺思路比較有意思,就記錄一下。
問題:
大概就是一個字串:"11-12,11-21,11-22,11-24",需要處理成"11-12至11-21,11-22至11-24",即兩個日期為一組,用“至”連線,然後每組日期用逗號隔開。
於是乎,折騰一番後,
思路是:
1、先按逗號拆分成單個日期,加上一個分組欄位,連續兩個日期為同一組;
2、按照分組用listagg進行聚合,用“至”分隔,這樣,兩個為一組的就拼接出來了;
3、將各組重新聚合,用逗號分隔,如此。
程式碼如下,with as的結構跟上面思路分點一樣:
with t1 as ( select regexp_substr('11-12,11-21,11-22,11-24', '[^,]+', 1, level ) dt , level lv, round(level/2) grp from dual connect by level <= regexp_count('11-12,11-21,11-22,11-247', '[^,]+') ), t2 as ( select grp, listagg(dt, '至')within group(order by lv) str from t1 group by grp ) select listagg(str, ',')within group(order by grp) str from t2;