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 婆婆高寿祝福语大全简短