如何查找包括当前日期在内的有用日期(Oracle)

时间:2018-12-28 07:45:28

标签: sql oracle calendar

大家早上好。 我遇到了问题,我想您可以帮助我。

我需要一个函数,该函数可以返回当前日期后的最近5个工作日。考虑到当前日期,我已经可以带上所有工作日了,但是我真正需要的是过去5天。

我按此顺序需要它们,例如:

Thursday: 27/12/2018
Wednesday 26/12/2018
Monday 24/12/2018
Friday 21/12/2018
Thursday 20/12/2018

1 个答案:

答案 0 :(得分:2)

像这样吗?

SQL> create table holidays (datum date);

Table created.

SQL> insert into holidays
  2    select date '2018-12-25' from dual union
  3    select date '2018-12-26' from dual union
  4    select date '2019-01-01' from dual;

3 rows created.

SQL> with calendar as
  2    (select trunc(sysdate) - 15 + level  datum
  3     from dual
  4     connect by level <= 15
  5    ),
  6  inter as
  7    (select datum,
  8            to_char(datum, 'day') n_day,
  9            row_number() over (order by datum desc) rn
 10     from calendar
 11     where to_char(datum, 'dy', 'nls_date_language=english') not in ('sat', 'sun')
 12       and datum not in (select datum from holidays)
 13    )
 14  select datum, n_day
 15  from inter
 16  where rn <= 5
 17  order by datum desc;

DATUM      N_DAY
---------- ---------
28/12/2018 friday
27/12/2018 thursday
24/12/2018 monday
21/12/2018 friday
20/12/2018 thursday

SQL>
  • HOLIDAYS表包含应从列表中删除的日期;我在克罗地亚放了几个假期。您的外观可能会有所不同。
  • CALENDAR CTE使用分层查询返回最近7天(一周)
  • TO_CHAR以及dy格式的掩码和日期语言设置为英语(如果使用其他语言,请注意日期名称),将删除星期六和星期日(周末)
  • ROW_NUMBER用于对日期进行“排序”,以便您可以选择最近5个工作日