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

SQL語(yǔ)句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論

黄山市| 奉节县| 青浦区| 博乐市| 桃江县| 阳江市| 彭山县| 白水县| 沙湾县| 台湾省| 肃北| 白朗县| 马边| 仲巴县| 汉阴县| 白玉县| 泌阳县| 湖口县| 太和县| 苏尼特左旗| 顺平县| 砚山县| 佛冈县| 牙克石市| 大关县| 安溪县| 正镶白旗| 民勤县| 孝昌县| 女性| 丰都县| 锦州市| 甘孜县| 大城县| 凤山县| 吴忠市| 宁德市| 阿克苏市| 民县| 历史| 林甸县|