Oracle字符串分隔符替换(替换奇数个或偶数个)

罪恶,,,,居然在图书馆占位子,,,

标题不知道怎么写比较适合,这是群里面一个小伙伴问我的问题,一番折腾后感觉思路比较有意思,就记录一下。

问题:

大概就是一个字符串:"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;

结果如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值