我有这个表,定义狗屎:
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
感谢您的回复...