作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字符串,用逗号分隔年份。
例如 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/
我是一名优秀的程序员,十分优秀!