用SQL语言计算两个日期间有多少个工作日

 我来答
硕致欣哈巧
2019-08-15 · TA获得超过2.9万个赞
知道小有建树答主
回答量:1.1万
采纳率:27%
帮助的人:839万
展开全部
/*
因为工作中一个奇怪的需求,要用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
RETURN
@hours
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式