SQL語句盤算兩個日期之間有若干個任務日的辦法。本站提示廣大學習愛好者:(SQL語句盤算兩個日期之間有若干個任務日的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL語句盤算兩個日期之間有若干個任務日的辦法正文
/*
由於任務中一個奇異的需求,要用SQL說話盤算兩個日時代有若干個任務日。
設定是一個禮拜有5個任務日,從禮拜一到禮拜五
解釋:
第一個禮拜的任務日數:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),起碼0天
末一個禮拜的任務日數:DATEPART(dw, @enddt),最多5天
盤算辦法:
假如兩個日期處在統一個禮拜內,直接盤算“第一個禮拜的任務日數”
不然按上面的公式盤算
(兩個日時代的總天數 - 第一個禮拜的天數 - 末一個禮拜的天數) / 7 * 5
+ 第一個禮拜的任務日數
+ 末一個禮拜的任務日數
*/
--盤算並前往兩個日時代的任務小時數(任務日*8)按周一到周五盤算
--必需先SET DATEFIRST 1
CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME)
RETURNS INTEGER
AS BEGIN
DECLARE @hours INTEGER
IF @@DATEFIRST <> 1 OR @bdate > @edate
RETURN -1
SELECT @hours =
--假如終止日期與肇端日期在統一個禮拜內,只須要盤算有幾天便可
CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0
WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate)
ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
--假如終止日期與肇端日期在分歧的禮拜內
--起首盤算出除前後兩個禮拜外完全的禮拜數 * 5
ELSE (DATEDIFF(dd,@bdate,@edate)
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
--再加上第一個禮拜裡的任務日數
+ CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
--加上末一個禮拜裡的任務日數
+ CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END
END * 8
RETURN @hours
END
以上就是本文的全體內容,願望對年夜家的進修有所贊助。