2011-06-07 373 views
1

我在表“tblExceptions”中有一个“workDate”字段和一个“receivedDate”字段。我需要计算二者的天数。 workDate总是优先 - 所以,实际上,它有点像workDate是“开始日期”,receivedDate是“结束日期”。一些排除对我来说很难处理:SQL查询计算天数,不包括假期/周末

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

此外,大多数flummoxing是工作日期永远不会发生在周末,但收到的日期可以。所以,我不知何故需要排除周末时我计数,但允许周末,如果接收日期恰好在星期六或星期日下降。所以,如果工作日期是2011年6月3日,并收到日期为2011年6月11日,有效天数是7,而不是9

任何的帮助深表感谢。谢谢!

+1

你能提供您的架构或查询证明你有什么到目前为止已经试过这样我们就可以尝试解决这个问题呢? – 2011-06-07 19:48:49

回答

2

像这样的东西应该给你的天与扣除节假日数量:

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

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

+0

这个伟大工程。我需要从主数据表中选择很多列,并且能够选择DATEDIFF栏是非常冷静。谢谢! – SeanFlynn 2011-06-09 23:27:20

1

如果你有一个完整的日期表包括(非周末,非节假日等),你知道的时候,“开始”日期和“结束”日期,那么你可以做一些事情大致如下:

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

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

相关问题