我有多条记录作为员工的工作时间
02:10:00
03:00:00
12:00:00
12:34:56
现在我需要添加这些记录并希望显示在
中`hh:mm:ss`
格式。我使用了以下查询,但只有当记录总和小于24小时但记录可能大于24小时时才有效。
SELECT CAST(DATEADD(MILLISECOND,
SUM(DATEDIFF(MILLISECOND, '00:00:00.000'
, CAST(WorkHrs AS TIME))), '00:00:00.000') AS TIME) AS Total_Time
FROM tblAttend
我在谷歌上花了4个多小时才找到解决方案但又没有成功了。
workinghour列的数据类型是varchar。
答案 0 :(得分:2)
时间数据类型的显式范围最多只能达到24小时(参见here)。
所以,我认为你自己完全坚持做转换。它很难看,但看起来像是:
SELECT RIGHT('00' + CAST(SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000')/(60*60) AS VARCHAR(255)), 2)
) +
RIGHT('00' + CAST((SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000')/60 % 60) AS VARCHAR(255)), 2) +
RIGHT('00' + CAST(SUM(DATEDIFF(MILLISECOND, '00:00:00.000', CAST(WorkHrs AS TIME))), '00:00:00.000') % 60 AS VARCHAR(255)), 2)
)
答案 1 :(得分:0)
Merhaba Waqas,
请问您可以尝试以下SQL CTE Select语句, 它返回小于24的小时值,对于这种情况,我猜是29。 请检查time calculation on SQL Server,此选择是从那里改编的
;with cte as (
select
userid,
total = sum( DATEPART(ss,period) + 60 * DATEPART(mi,period) + 3600 * DATEPART(hh,period) )
from WorkingHours
group by userid
)
select
userid,
total [Total Time in Seconds],
(total / 3600) [Total Time Hour Part],
((total % 3600) / 60) [Total Time Minute Part],
(total % 60) [Total Time Second Part]
from cte
我希望它可以帮到你