如何在oracle中对序列号进行分组?

我有一个用逗号隔开多年的字符串.

例如2000,2001,2002,2005,2006,2007和2010.

我想将连续数字分组.

我的输出应该是2000-2003,2005-2007和2010.在Oracle存储过程中有没有办法做到这一点?

18:42:15 SYstem@dwal> l
  1  with p as (
  2    select replace('2000,2007 and 2010',' and ',',') s,'[0-9]{4}' r from dual
  3  ),ex as (
  4    select regexp_substr(s,r,1,level) as y
  5      from p
  6    connect by level <= regexp_count(s,r)
  7  ),grp as (
  8    select connect_by_root(y) s,y
  9      from ( select e1.y y,e2.y p from ex e1,ex e2 where e1.y - 1 = e2.y(+) )
 10   connect by prior y = p
 11     start with p is null
 12  ),agg as (
 13  select listagg(s||decode(max(y),s,null,'-'||max(y)),') within group (order by s) str
 14    from grp group by s
 15  )
 16* select regexp_replace(str,regexp_count(str,')) result from agg
18:42:16 SYstem@dwal> /

RESULT
------------------------------
2000-2002,2005-2007 and 2010

Elapsed: 00:00:00.02

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...