【问题标题】:SQL Query to Count Number of Days, Excluding Holidays/WeekendsSQL查询计算天数,不包括节假日/周末
【发布时间】:2011-06-07 19:44:53
【问题描述】:

我在表“tblExceptions”中有一个“workDate”字段和一个“receivedDate”字段。我需要计算两者之间的天数。 workDate 总是第一位的——所以,实际上,有点像 workDate 是“开始日期”而 receivedDate 是“结束日期”。不过,有些排除对我来说很棘手:

首先,我需要排除节假日。我确实有一张名为“tblHolidays”的表格,其中包含一个字段 - 假日日期。我的假期存储到明年,所以也许我可以将其合并到查询中?

此外,最令人困惑的是,工作日期永远不会出现在周末,但收到的日期却可以。因此,我在计算时需要以某种方式排除周末,但如果收到的日期恰好在星期六或星期日,则允许周末。因此,如果工作日期是 2011 年 6 月 3 日,而收到日期是 2011 年 6 月 11 日,则有效天数将是 7,而不是 9。

非常感谢您对此的任何帮助。谢谢!

【问题讨论】:

  • 您能否提供您的架构或查询来展示您迄今为止所做的尝试,以便我们尝试解决此问题?

标签: sql


【解决方案1】:

这样的东西应该给你减去假期的天数:

select
  days = datediff(day, workDate, receivedDate)
  - (select count(*) from tblHolidays where holidayDate >= workDate and holidayDate < receivedDate)
from
  tblExceptions

请注意,日期函数因数据库系统而异。这是基于 MS SQL Server 的,因此如果您使用其他数据库,可能需要对其进行调整。

【讨论】:

  • 这很好用。我需要从主数据表中选择很多列,并且能够选择 datediff 列非常酷。谢谢!
【解决方案2】:

如果您有一张包含要包括的日期(非周末、非节假日等)的表格,并且您知道“开始”日期和“结束”日期是什么时候,那么你可以大致做这样的事情:

select count(*) from tblIncludedDates where beginDateValue <= dateField and endDateValue >= dateField

获取这些日期之间的有效天数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多