在SQL Server 2008中计算超过24小时

时间:2015-07-13 12:02:44

标签: sql sql-server

我有多条记录作为员工的工作时间

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。

2 个答案:

答案 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

我希望它可以帮到你