SQl Server平均每天小时数

时间:2014-06-24 05:25:02

标签: sql sql-server-2008

我想计算一周的平均小时数。

e.g。我的每周工作时间是44:43(hh:mm),我的工作日是5 那么它应该返回 8:57

44:43/5 ==> 8时57分

我如何在SQL Server中实现。

4 个答案:

答案 0 :(得分:0)

您可以将时间转换为秒,然后分割,然后转换回时间格式。假设WeeklyHours采用time格式,如下所示:

select dateadd(second, datediff(second, 0, WeeklyHours) / WorkingDays, cast(0 as time))

如果WeeklyHours存储为datetime,那么此表达式肯定有用。

答案 1 :(得分:0)

SELECT CONVERT(VARCHAR,CONVERT(INT,DATEPRT(HH,WH))/5)+':'+
        +CONVERT(VARCHAR,(CONVERT(INT,DATEPRT(HH,WH))%5*60+CONVERT(INT,DATEPRT(mm,WH)))/5)
fROM TIME

答案 2 :(得分:0)

这是我根据您的要求构建的查询:

DECLARE @TotalHours VARCHAR(5) = '44:43'


SELECT CAST(CAST(AvgMinutes AS INT)/60 AS VARCHAR) + ':'
        + CAST(CAST(AvgMinutes AS INT)%60 AS VARCHAR)
FROM (
        SELECT CEILING((CAST(LEFT(@TotalHours,CHARINDEX(':',@TotalHours) - 1) AS INT ) * 60 
           + CAST(RIGHT(@TotalHours,LEN(@TotalHours) - CHARINDEX(':',@TotalHours)) AS INT ))/5.0) AvgMinutes
     ) AS TotalMinutes

答案 3 :(得分:0)

没有得到计算。我想要得到的是(44 +(43/60))/ 5.我做了43/60将分钟转换为小时。根据此要求,查询为

select (cast(SUBSTRING(Data, 1, charindex(':',Data,1) - 1) as int) + 
    (cast(SUBSTRING(Data, charindex(':',Data,1) + 1, len(Data)) as decimal(18,2)) / 60)) / 5
from tblWorkHours