操作数据类型时间对于avg操作符无效...?

时间:2012-08-03 00:50:17

标签: sql sql-server

我如何在以下查询中平均(时间(4)):

  select top 10 avg(e.Duration) from TimeTable e

我收到以下错误:

  

操作数据类型时间对于avg操作符无效。

持续时间是类型时间(4),例如:

Duration
-------------
00:00:10.0000

4 个答案:

答案 0 :(得分:13)

您可以使用DateDiff( ms, '00:00:00', e.Duration )将时间转换为整数毫秒。将其用于您的聚合,然后将结果转换回来,例如Cast( DateAdd( ms, 1234, '00:00:00' ) as Time )

答案 1 :(得分:8)

改善HABO答案:

select top 10
Cast(DateAdd( ms,avg(DateDiff( ms, '00:00:00', e.Duration)), '00:00:00' )  as time) as 'avg duration' 
from TimeTable e

答案 2 :(得分:1)

似乎timeavg()方法的无效类型。请参阅here以获取有效数据类型的列表。

此外,您似乎需要一组值,这样就无法使用当前查询top 10

答案 3 :(得分:1)

除了HABO和Rafi的答案之外。

对于我的情况,我不得不将DATEDIFF的值转换为bigint,因为我的值太大而导致算术溢出错误。

CAST(DATEADD( ms,AVG(CAST(DATEDIFF( ms, '00:00:00', ISNULL(e.Duration, '00:00:00')) as bigint)), '00:00:00' )  as TIME) as 'avg_time'