最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

SQL语句计算两个日期之间有多少个工作日的方法

来源:懂视网 责编:小采 时间:2020-11-09 07:03:23
文档

SQL语句计算两个日期之间有多少个工作日的方法

SQL语句计算两个日期之间有多少个工作日的方法:/* 因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。 设定是一个星期有5个工作日,从星期一到星期五 说明: 第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天 末一个星期的工作日数:DATEPART(d
推荐度:
导读SQL语句计算两个日期之间有多少个工作日的方法:/* 因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。 设定是一个星期有5个工作日,从星期一到星期五 说明: 第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天 末一个星期的工作日数:DATEPART(d

/*
因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。
设定是一个星期有5个工作日,从星期一到星期五
说明:
  第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
  末一个星期的工作日数:DATEPART(dw, @enddt),最多5天
计算方法:
  如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”
  否则按下面的公式计算
    (两个日期间的总天数 - 第一个星期的天数 - 末一个星期的天数) / 7 * 5
  + 第一个星期的工作日数
  + 末一个星期的工作日数
*/

 --计算并返回两个日期间的工作小时数(工作日*8)按周一到周五计算
--必须先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 =
 --如果终止日期与起始日期在同一个星期内,只需要计算有几天即可
 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 @hours
END

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

SQL语句计算两个日期之间有多少个工作日的方法

SQL语句计算两个日期之间有多少个工作日的方法:/* 因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。 设定是一个星期有5个工作日,从星期一到星期五 说明: 第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天 末一个星期的工作日数:DATEPART(d
推荐度:
标签: sql 工作日 sql语句
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top