国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

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

2020-07-25 12:52:33
字體:
來源:轉載
供稿:網友

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

 --計算并返回兩個日期間的工作小時數(工作日*8)按周一到周五計算--必須先SET DATEFIRST 1CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME) RETURNS INTEGERAS 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 @hoursEND

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 布尔津县| 佛教| 辽阳县| 益阳市| 循化| 阿瓦提县| 若尔盖县| 台南市| 沭阳县| 榆社县| 新巴尔虎左旗| 凤阳县| 上思县| 道真| 开鲁县| 淮安市| 宿松县| 三明市| 柯坪县| 壤塘县| 桃源县| 温宿县| 邵武市| 通江县| 汾西县| 富宁县| 无棣县| 囊谦县| 阜新市| 葵青区| 榕江县| 喀什市| 遵义县| 讷河市| 射洪县| 象山县| 长顺县| 新平| 东阿县| 墨竹工卡县| 万盛区|