随笔 - 87  文章 - 1  评论 - 610  阅读 - 44万

一般性工作时间计算存储过程(SQL SERVER)


在统计工作效率的时候,只计算工作时候非常重要
写了一个一般性工作时间计算的函数
CREATE     FUNCTION fun_GetWorkMinute
(
     
@startDate DATETIME ,
     
@endDate DATETIME
)
RETURNS int 
AS
begin
    
declare @DayMinute int,@s_Minute int,@s_Minute2 int
    
set @DayMinute = 7*60    --一天工作7个小时
    set @s_Minute = 11*60 + 30     --上午11:30下班
    set @s_Minute2 = 14*60        --下午14上班
    declare @minute int,@day int,@totalDay int
    
set @minute = 0
    
if @startDate is not null and @endDate is not null
    
begin
        
set @totalDay = datediff(day,@startDate,@endDate)
        
set @day = @totalDay/7 ---周
        if @day > 0
            
set @minute = @minute + @day*5* @DayMinute
        
declare @sM int,@sM2 int
        
set @sM = datepart(hour,@startDate)*60 + datepart(minute,@startDate)
        
set @sM2 = datepart(hour,@endDate)*60 + datepart(minute,@endDate)
        
set @day = @totalDay - @day * 7
        
if @day > 0
            
set @minute = @minute + @day* @DayMinute
        
--同一个上下午段,非工作时间也类同
        if (@sM >= @s_Minute2 AND  @sM2 >= @s_Minute2or  (@sM <= @s_Minute AND  @sM2 <= @s_Minute)
            
set @minute = @minute - @sM + @sM2
        
else if  (@sM >= @s_Minute2)    --上午到下午
            set @minute = @minute - @sM + @sM2 + @s_Minute2 -  @s_Minute
        
else        --下午到下一天的上午
            set @minute = @minute - @sM + @sM2 - @s_Minute2 +  @s_Minute
        
    
end
    
return @minute
end


对于五一,十一没有作处理,需要加工作日管理的模块
posted on   edobnet  阅读(2511)  评论(5编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
< 2005年6月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示