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
以上就是本文的全體內容,願望對年夜家的進修有所贊助。