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

-Holidays

我试着计算两个日期之间没有周末和假期的工作日数.
输出应该是这样的:
Start Date | End Date | Business Days
Run Code Online (Sandbox Code Playgroud)
请你帮助我好吗
您可以使用如下查询删除非周末假期:
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 处理星期几的方式变得相当复杂,所以上面的近似值也许就足够了。
| 归档时间: |
|
| 查看次数: |
5778 次 |
| 最近记录: |