2011-06-07 372 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 

以獲得這些日期之間的有效天數。

相關問題