2012-08-03 453 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 
相關問題