【发布时间】:2014-02-13 20:49:04
【问题描述】:
如果总工作时间大于 08:00,则成功计算一个人已经工作和加班的总时间,但如果不大于该时间,则该人未在加班列中工作的持续时间,但现在加班列应显示该时间以适当的否定格式,例如如果某人从 14:49 工作到 15:20 比 Overtime 栏应该显示 -00:29 但我的栏显示它像这样 23:29,为什么 23: 而不是 00: ?我怎样才能得到正确的时间?
代码
with times as (
SELECT t1.EmplID
, t3.EmplName
, min(t1.RecTime) AS InTime
, max(t2.RecTime) AS [TimeOut]
, cast(min(t1.RecTime) as datetime) AS InTimeSub
, cast(max(t2.RecTime) as datetime) AS TimeOutSub
, t1.RecDate AS [DateVisited]
FROM AtdRecord t1
INNER JOIN
AtdRecord t2
ON t1.EmplID = t2.EmplID
AND t1.RecDate = t2.RecDate
AND t1.RecTime < t2.RecTime
inner join
HrEmployee t3
ON t3.EmplID = t1.EmplID
group by
t1.EmplID
, t3.EmplName
, t1.RecDate
)
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,convert(char(5),cast([TimeOutSub] - InTimeSub as time), 108) totaltime
,convert(char(5), case when TimeOutSub - InTimeSub >= '08:01' then
cast(TimeOutSub - dateadd(hour, 8, InTimeSub) as time) else cast(8 - (TimeOutSub - InTimeSub) as time) end, 108) as overtime
FROM times
【问题讨论】:
-
如果你能使用一些标点符号和礼貌就好了。
-
好的先生,下次我会尽力的:)正如你所说:)
标签: sql tsql datetime sql-server-2008-r2 sql-server-2012