- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL计算有效工作时间
说明: 2
1、目的: 2
2、数据库: 2
3、数据表: 2
4、函数: 2
F_GetWorkTime 3
F_GetWorkTimeOnDay 5
F_GetWorkTimeOnWeek 8
说明:
1、目的:
计算有效工作时间,计算时间段内,排除每周休息日、节假(调休)日、每天非工作时间后的有效工作时间
2、数据库:
SQL SERVER
3、数据表:
DayWorkTime :每天工作时间段表 ;
WeekWorkTime :每周工作时间安排表(比如1-5为工作日6-7为休息日); VacationDay :节假日(调休日)安排表 。
3张表通过wtsid(即同一个工作时间计划表)关联 ,具体表结构请自行设计
4、函数:
F_GetWorkTimeOnDay: 根据设定时间段,计算开始时间和结束时间的有效时间总量,不排除节假日和周末;
F_GetWorkTimeOnWeek:根据设定时间段,计算开始时间和结束时间的有效时间总量,不排除节假日; 需要调用F_GetWorkTimeOnDay
F_GetWorkTime:根据设定时间段,计算开始时间和结束时间的有效时间总量,需要调用F_GetWorkTime
F_GetWorkTime
-- =============================================
-- Author: Author,,HeXiangGui
-- Create date: Create Date, ,2018/03/29
-- Description: Description, ,根据设定时间段,计算开始时间和结束时间的有效时间总量
-- @starttime:开始时间
-- @endtime:结束时间
-- =============================================
ALTER FUNCTION [dbo].[F_GetWorkTime](
@startTime DATETIME=2001-01-01,
@endTime DATETIME=2001-01-01,
@wtsid uniqueidentifier=F4C461D4-E2D7-4165-8AE7-CE887B7C3D5E)
RETURNS INT
AS
BEGIN
-----------------------------------
---结束时间早于开始时间直接返回0---
IF(@starttime=@endtime)
BEGIN
RETURN 0
END
------------------
---临时变量定义---
DECLARE @countTimepart INT --时间段数量
SET @countTimepart=0 --初始化为0
DECLARE @workTime INT
SET @workTime=0
DECLARE @validWorkTime INT
SET @validWorkTime=0
DECLARE @invalidWorkTime INT
SET @invalidWorkTime=0
DECLARE @isvalid BIT
SET @isvalid=0
DECLARE @tempStartTime DATETIME --
DECLARE @tempEndTime DATETIME
------------------------
----全局临时变量赋值----
SELECT @countTimepart=COUNT(1) FROM VacationDay WHERE NOT ((endTime = @startTime) OR (startTime = @endTime )) AND wtsid=@wtsid
IF(@countTimepart1) --时间段和节假日表无交集
BEGIN
SELECT @workTime=dbo.F_GetWorkTimeOnWeek(@startTime,@endTime,@wtsid)
END
IF(@countTimepart0) --时间段和节假日表有交集
BEGIN
SELECT @tempEndTime=@startTime
WHILE(@countTimepart0)
BEGIN
SELECT TOP 1 @tempStartTime=CASE WHEN startTime@startTime THEN startTime ELSE @startTime END,
@tempEndTime=CASE WHEN endTime@endTime THEN endTime ELSE @endTime END,@isvalid=isAdjust
FROM
文档评论(0)