程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL語句盤算兩個日期之間有若干個任務日的辦法

SQL語句盤算兩個日期之間有若干個任務日的辦法

編輯:MSSQL

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

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved