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
以上就是本文的全部内容,希望对大家的学习有所帮助。