gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:11:07 25 4
gpt4 key购买 nike

我有一个字符串,用逗号分隔年份。

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

我想对连续的数字进行分组。

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

最佳答案

免责声明 - 我不建议“按原样”使用此解决方案,但它可以提供想法,并且编写它很有趣

我假设您在表格中有一个包含 csv 字符串的列。

如果您使用的是 oracle 11gR2,那么您可以使用递归 CTE-
Here is a sqlfiddle demo

with t as 
(
select replace(replace(v, ' and ', ','), ' ','') v
from strings
),
rcte(text, token, res) as
(
select v, regexp_substr(v, '^\d*[^,]'), regexp_substr(v, '^\d*[^,]') ||'-'
from t
union all
select regexp_replace(text, '^\d*,', ''),
regexp_substr(text, '^\d*[^,]'),
case when regexp_substr(text, '^\d*[^,]') = token then
res
when regexp_substr(text, '^\d*[^,]') = token+1 then
regexp_replace(res, '-\d*$', '-'||(token+1))
else rtrim(res, '-') || ',' || regexp_substr(text, '^\d*[^,]') || '-'
end
from rcte
where text <> token
)
select rtrim(res, '-') from rcte
where text = regexp_substr(rtrim(res, '-'), '\d*$');

(这也可以在没有正则表达式的情况下完成)

关于oracle - 如何在oracle中对序列号进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com