没有周末和假期的两个日期之间的差异Sql查询ORACLE

Dev*_*dev 5 sql oracle

我有2个表:第一个包含采购订单的开始日期和结束日期,第二个表包含年份hollidays

-采购订单

在此输入图像描述

-Holidays

我试着计算两个日期之间没有周末和假期的工作日数.

输出应该是这样的:

Start Date | End Date | Business Days
Run Code Online (Sandbox Code Playgroud)

请你帮助我好吗

Gor*_*off 2

您可以使用如下查询删除非周末假期:

select (t.end_date - t.start_date) - count(c.date)
from table1 t left join
     calendar c
     on c.date between t1.start_date and t1.end_date and
        to_char(c.date, 'D') not in ('1', '7')
group by t.end_date, t.start_date;
Run Code Online (Sandbox Code Playgroud)

去掉周末就变得更加复杂。整周有两个周末,所以这很容易。所以一个好的近似是:

select (t.end_date - t.start_date) - (count(c.date) +
       2 * floor((t.end_date - t.start_date) / 7))
from table1 t left join
     calendar c
     on c.date between t1.start_date and t1.end_date and
        to_char(c.date, 'D') not in ('1', '7')
group by t.end_date, t.start_date;
Run Code Online (Sandbox Code Playgroud)

这不会获得星期几,这本质上是如果结束日期在开始日期之前,那么它就在下一周。然而,这个逻辑与 Oracle 处理星期几的方式变得相当复杂,所以上面的近似值也许就足够了。