SQL语句计算两个日期之间有多少个工作日的方法
/*
因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。
设定是一个星期有5个工作日,从星期一到星期五
说明:
第一个星期的工作日数:DATEPART(dw,@begdt)-DATEPART(dw,@begdt),最少0天
末一个星期的工作日数:DATEPART(dw,@enddt),最多5天
计算方法:
如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”
否则按下面的公式计算
(两个日期间的总天数-第一个星期的天数-末一个星期的天数)/7*5
+第一个星期的工作日数
+末一个星期的工作日数
*/
--计算并返回两个日期间的工作小时数(工作日*8)按周一到周五计算 --必须先SETDATEFIRST1 CREATEFUNCTIONdbo.CalcWorkHours(@bdateDATETIME,@edateDATETIME) RETURNSINTEGER ASBEGIN DECLARE@hoursINTEGER IF@@DATEFIRST<>1OR@bdate>@edate RETURN-1 SELECT@hours= --如果终止日期与起始日期在同一个星期内,只需要计算有几天即可 CASEWHENDATEPART(wk,@edate-1)-DATEPART(wk,@bdate)=0THEN CASEWHENDATEPART(dw,@bdate)>5THEN0 WHENDATEPART(dw,@edate-1)>5THEN6-DATEPART(dw,@bdate) ELSEDATEPART(dw,@edate-1)-DATEPART(dw,@bdate)+1END --如果终止日期与起始日期在不同的星期内 --首先计算出除前后两个星期外完整的星期数*5 ELSE(DATEDIFF(dd,@bdate,@edate) -(8-DATEPART(dw,@bdate)) -DATEPART(dw,@edate-1))/7*5 --再加上第一个星期里的工作日数 +CASEWHENDATEPART(dw,@bdate)<6THEN6-DATEPART(dw,@bdate) ELSE0END --加上末一个星期里的工作日数 +CASEWHENDATEPART(dw,@edate-1)>5THEN5ELSEDATEPART(dw,@edate-1)END END*8 RETURN@hours END
以上就是本文的全部内容,希望对大家的学习有所帮助。
热门推荐
10 五一公司放假祝福语简短
11 追星女孩的祝福语简短
12 给长辈端午祝福语 简短
13 生日祝福语有诗意简短
14 团圆日祝福语简短
15 中秋商务祝福语简短最新
16 温暖文艺简短祝福语短句
17 男孩上学祝福语简短的
18 入住酒店文案祝福语简短