一種方法....
CREATE TABLE #Days (ActualDay Date, DayOf varchar(10), Holiday bit)
INSERT #Days SELECT '9/1/2014', DATENAME(dw,'9/1/2014'), 1
INSERT #Days SELECT '9/2/2014', DATENAME(dw,'9/2/2014'), 0
INSERT #Days SELECT '9/3/2014', DATENAME(dw,'9/3/2014'), 0
INSERT #Days SELECT '9/4/2014', DATENAME(dw,'9/4/2014'), 0
INSERT #Days SELECT '9/5/2014', DATENAME(dw,'9/5/2014'), 0
INSERT #Days SELECT '9/6/2014', DATENAME(dw,'9/6/2014'), 0
INSERT #Days SELECT '9/7/2014', DATENAME(dw,'9/7/2014'), 0
INSERT #Days SELECT '9/8/2014', DATENAME(dw,'9/8/2014'), 0
INSERT #Days SELECT '9/9/2014', DATENAME(dw,'9/9/2014'), 0
INSERT #Days SELECT '9/10/2014', DATENAME(dw,'9/10/2014'), 0
SELECT COUNT(*)
FROM #Days
WHERE ActualDay BETWEEN '9/1/2014' AND '9/9/2014'
AND Holiday = 0
AND DayOf NOT IN ('Saturday', 'Sunday')
另一個選項(從Count work days between two dates使用一些代碼)...
CREATE TABLE #Holidays (Holiday Date)
INSERT #Holidays SELECT '1/1/14'
INSERT #Holidays SELECT '1/20/14'
INSERT #Holidays SELECT '2/17/14'
INSERT #Holidays SELECT '4/18/14'
INSERT #Holidays SELECT '5/26/14'
INSERT #Holidays SELECT '7/4/14'
INSERT #Holidays SELECT '9/1/14'
INSERT #Holidays SELECT '10/13/14'
INSERT #Holidays SELECT '11/11/14'
INSERT #Holidays SELECT '11/27/14'
INSERT #Holidays SELECT '12/25/14'
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
DECLARE @Holidays int
SET @StartDate = '1/1/14'
SET @EndDate = '1/3/14'
SELECT @Holidays = COUNT(*) FROM #Holidays WHERE Holiday BETWEEN @StartDate AND @EndDate
SELECT
(DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate) * 2)
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
- @Holidays
[兩個日期之間的數個工作日內]的可能重複(HTTP:/ /stackoverflow.com/questions/252519/count-work-days-between-two-dates) – Tanner 2014-09-03 11:06:01
問題是我們必須放假,並且需要從原來的小時數中減去。 – user3619447 2014-09-03 11:18:31
我建議爲日曆創建一個表格,因爲美國和英國的假期被定義爲我們可以很容易地爲將來的年份創建日曆,一旦它準備好了,我們就可以輕鬆地查詢並獲得兩個日期之間的工作日。更多詳情請參考URL http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html – 2014-09-03 11:50:10