【发布时间】:2022-01-15 04:41:38
【问题描述】:
我有一个包含日期列 (date_for) 的表,我想获取此列的连续日期范围。
select
date_for
from (select to_date('20210910','yyyymmdd') date_for from dual union all
select to_date('20210911','yyyymmdd') date_for from dual union all
select to_date('20210912','yyyymmdd') date_for from dual union all
select to_date('20210913','yyyymmdd') date_for from dual union all
select to_date('20210915','yyyymmdd') date_for from dual union all
select to_date('20210916','yyyymmdd') date_for from dual union all
select to_date('20210917','yyyymmdd') date_for from dual union all
select to_date('20211011','yyyymmdd') date_for from dual union all
select to_date('20211012','yyyymmdd') date_for from dual union all
select to_date('20211108','yyyymmdd') date_for from dual
)
所需的输出类似于:
2021.09.10-2021.09.13
2021.09.15-2021.09.17
2021.10.11-2021.10.12
2021.11.08-2021.11.08
如何查询?
【问题讨论】:
-
这能回答你的问题吗? Gaps and Islands Months only
-
顺便说一下,
to_date('20210910','yyyymmdd')可以更简单地写成date '2021-09-10'。 -
@William:是的,但我更喜欢使用 to_char() 函数。当您想使用参数时, to_char 很方便。它适用于世界各地,无论 NLS 设置如何。 :)
-
@lmocsi 不过,这些东西都不适用于这里。您不需要参数,并且 ANSI 日期文字独立于 NLS 领域。