我有这个表,为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)
但是没有超时计算最后一班。 请帮助。
答案 0 :(得分: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
感谢您的回复......