使用 SQL 服务器以 24 小时制计算多班制的加班时间



我有这个表,定义狗屎:

ShiftCode ShiftInTime  ShiftOutTime
    1       09:00         17:30
    2       06:00         14:00
    3       14:00         22:00
    4       22:00         06:00

现在,员工有 InTime 和 OutTime,08:58:00.000,18:45:00.000我必须计算表中定义的每个班次的加班时间。我正在使用此查询来计算加班时间:-

DECLARE @OTHours NUMERIC(18,2)    
SET @OTHours=(CASE WHEN @OutTime<=@ShiftOutTime THEN 0 ELSE   ((DATEDIFF(MINUTE,@ShiftOutTime,@OutTime))/60) END)

但是没有计算最后一班的加班费。请帮忙。

这有帮助吗?

Sql 小提琴:http://sqlfiddle.com/#!6/9eecb/4249/2

关键点除以 60.0

>@ShiftOutTime是时间定义的移位表和@OutTime是员工的下班时间。

我已经找到了解决方案,为了计算加班时间,我使用了这个查询:

CASE 
                WHEN @InTime=@OutTime THEN 0
                WHEN CONVERT(TIME,@OutTime)<@ShiftOutTime THEN 0
                WHEN CONVERT(TIME,@OutTime)<@ShiftOutTime THEN FLOOR(CAST(((24-((DATEDIFF(MINUTE,CONVERT(TIME,@OutTime),@ShiftOutTime))/CAST(60 AS NUMERIC(18,2))))-CAST(0.5 AS NUMERIC(18,2))) AS NUMERIC(18,2)))
                WHEN CONVERT(TIME,@OutTime)=@ShiftOutTime THEN 0
                ELSE (CAST((((DATEDIFF(MINUTE,@ShiftOutTime,CONVERT(TIME,@OutTime)))/CAST(60 AS NUMERIC(18,2)))-CAST(0.5 AS NUMERIC(18,2))) AS NUMERIC(18,2)))
                END

感谢您的回复...

最新更新