gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:03:29 24 4
gpt4 key购买 nike

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

-采购订单

enter image description here

-假期

我正在尝试计算两个日期之间的工作日数(不包括周末和节假日)。

输出应该是这样的:

Start Date | End Date | Business Days

你能帮我吗

最佳答案

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

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;

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

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;

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

关于sql - 没有周末和节假日的两个日期之间的差异 Sql 查询 ORACLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com