下一个工作日在SQL中不休假

时间:2019-07-09 07:43:31

标签: sql oracle plsql

我有Sent items表,其中包含所有假期。

如何在一个SQL查询中从给定日期开始下一个工作日,而不使用下面的Holiday循环?

FOR

2 个答案:

答案 0 :(得分:2)

SELECT MIN(hd)
FROM (
    select TO_DATE('2019-07-01', 'YYYY-MM-DD') as hd from dual
    union 
    select trunc(h.holiday_date + 1)
        FROM
            holiday h
        WHERE
            trunc(h.holiday_date) >= TO_DATE('2019-07-01', 'YYYY-MM-DD')
            )  t left join holiday h2 on trunc(h2.holiday_date) = t.hd
WHERE h2.holiday_date IS NULL;

答案 1 :(得分:0)

您可能要使用分层查询:

 select  nvl(max(holiday_date)+1, trunc(sysdate))
   from  holiday
connect  by holiday_date = prior holiday_date + 1
  start  with holiday_date = trunc(sysdate) 

它的工作原理是:

  • 如果sysdate是假期,它将建立一个连续的假期链,然后返回max holiday_date + 1作为下一个营业日期

  • 如果sysdate不是假期,它将返回sysdate(nvl()返回null时,max会这样做)

因此,只需将trunc(sysdate)替换为您的给定日期,它就可以像您的代码一样工作。