最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL語句計算兩個日期之間有多少個工作日的方法

 更新時間:2015年08月03日 15:29:07   投稿:lijiao  
本文的主要內(nèi)容是用SQL語言計算兩個日期間有多少個工作日,需要的朋友可以參考下

/*
因為工作中一個奇怪的需求,要用SQL語言計算兩個日期間有多少個工作日。
設定是一個星期有5個工作日,從星期一到星期五
說明:
  第一個星期的工作日數(shù):DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
  末一個星期的工作日數(shù):DATEPART(dw, @enddt),最多5天
計算方法:
  如果兩個日期處在同一個星期內(nèi),直接計算“第一個星期的工作日數(shù)”
  否則按下面的公式計算
    (兩個日期間的總天數(shù) - 第一個星期的天數(shù) - 末一個星期的天數(shù)) / 7 * 5
  + 第一個星期的工作日數(shù)
  + 末一個星期的工作日數(shù)
*/

 --計算并返回兩個日期間的工作小時數(shù)(工作日*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 =
     --如果終止日期與起始日期在同一個星期內(nèi),只需要計算有幾天即可
     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
       --如果終止日期與起始日期在不同的星期內(nèi)
       --首先計算出除前后兩個星期外完整的星期數(shù) * 5
       ELSE (DATEDIFF(dd,@bdate,@edate)
             - (8-DATEPART(dw, @bdate))
             - DATEPART(dw, @edate-1)) / 7 * 5
          --再加上第一個星期里的工作日數(shù)
         + CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate)
            ELSE 0 END
          --加上末一個星期里的工作日數(shù)
         + CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END
     END * 8
 RETURN @hours
END

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關文章

最新評論

连城县| 奉新县| 乐至县| 崇礼县| 合山市| 盱眙县| 偃师市| 吉安市| 河源市| 高青县| 通化县| 敦煌市| 宜章县| 汝州市| 甘洛县| 鹤壁市| 宜都市| 都昌县| 调兵山市| 乐陵市| 汾阳市| 盐池县| 庐江县| 大化| 若尔盖县| 安多县| 丰原市| 嘉义市| 汪清县| 独山县| 贡嘎县| 长沙县| 长泰县| 开封县| 赤城县| 澳门| 确山县| 民和| 和静县| 台北县| 九台市|