SQL查询计算天数,不包括假期/周末

时间:2011-06-07 19:44:54

标签: sql

我在表“tblExceptions”中有一个“workDate”字段和一个“receivedDate”字段。我需要计算两个人的天数。 workDate总是第一位 - 所以,实际上,它有点像workDate是“开始日期”而receiveDate是“结束日期”。但是有些例外情况对我来说很棘手:

首先,我需要排除假期。我有一个名为“tblHolidays”的表,有一个字段 - holidayDate。我有假期存储到明年,所以也许我可以将其纳入查询?

此外,大多数令人不安的是工作日期永远不会发生在周末,但收到的日期可以。所以,我在某种程度上需要在我计算时排除周末,但如果收到的日期恰好在星期六或星期日,请允许周末。因此,如果工作日期是2011年6月3日,并且收到日期是2011年6月11日,则有效天数将是7,而不是9。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

这样的事情会给你减去假期的天数:

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

请注意,日期函数在数据库系统之间有所不同。这基于MS SQL Server,因此如果您使用其他数据库,则可能需要进行调整。

答案 1 :(得分:1)

如果您的表格中包含包含(非周末,非假期等)的日期,并且您知道“开始”日期和“结束”日期的时间是,那么你可以大致这样做:

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

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