2012-08-03 42 views
7

我怎样才能AVG(时间(4))在下面的查询:对于avg运算符,操作数数据类型时间无效...?

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

,我发现了以下错误:

Operand data type time is invalid for avg operator.

时间是输入时间(4)如:

Duration 
------------- 
00:00:10.0000 
+0

TIME表示一个时间点。如果您尝试存储持续时间,请将其存储为整数。 – 2012-08-03 02:53:24

+0

@AaronBertrand:嗨,我不能将它作为int存储......它不是我的数据库。 – JaJ 2012-08-03 03:20:45

+0

然后,您需要每次执行转换或其他日期操作。你应该告诉数据库所有者他们正在付出巨大的代价来存储一个很好的格式。 – 2012-08-03 03:57:15

回答

11

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

+0

什么是'ms'在这里? – xameeramir 2016-09-08 13:05:48

+1

根据[文档](https://msdn.microsoft.com/en-us/library/ms189794.aspx?ppud=4),它表示应该以毫秒为单位返回日期/时间之间的差异。 – HABO 2016-09-11 03:46:01

1

好吧,time好像是avg()方法的无效类型。请参阅here以获取有效数据类型的列表。

此外,您似乎需要一组值,因此您的当前查询将无需使用top 10

7

提高关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 
相关问题