使用SQL SERVER计算24小时格式的多班次加班

时间:2015-04-16 14:24:27

标签: sql-server-2008

我有这个表,为shits定义:

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 like。,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)

但是没有超时计算最后一班。 请帮助。

2 个答案:

答案 0 :(得分:0)

这有帮助吗?

Sql Fiddle:http://sqlfiddle.com/#!6/9eecb/4249/2

关键点除以60.0

答案 1 :(得分:0)

@ShiftOutTime是定义Shift表的时间和 @OutTime是员工的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

感谢您的回复......