我有Sent items
表,其中包含所有假期。
如何在一个SQL查询中从给定日期开始下一个工作日,而不使用下面的Holiday
循环?
FOR
答案 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)
替换为您的给定日期,它就可以像您的代码一样工作。