本文共 684 字,大约阅读时间需要 2 分钟。
罪恶,,,,居然在图书馆占位子,,,
标题不知道怎么写比较适合,这是群里面一个小伙伴问我的问题,一番折腾后感觉思路比较有意思,就记录一下。
大概就是一个字符串:"11-12,11-21,11-22,11-24",需要处理成"11-12至11-21,11-22至11-24",即两个日期为一组,用“至”连接,然后每组日期用逗号隔开。
于是乎,折腾一番后,
1、先按逗号拆分成单个日期,加上一个分组字段,连续两个日期为同一组;
2、按照分组用listagg进行聚合,用“至”分隔,这样,两个为一组的就拼接出来了;
3、将各组重新聚合,用逗号分隔,如此。
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;
转载地址:http://zmkgf.baihongyu.com/