2012-07-05 106 views
4
ProcessTime: 00:00:00.0000012 
RegexResolveTime: 00:00:00.0000421 
MessageResolveTime: 00:00:00.0001269 
FullProcessTime: 00:00:00.0001734 

好吧,我有4列如上數據類型Time(7)。我需要獲得這些單個列的所有條目的平均值,但Time(7)對於AVG運算符不是有效的類型!獲取TIME的平均值(7)

一個人如何去獲得一個Time(7)列的平均?

我會補充說,這些是時間跨度,而不是在時間的離散點即使SQL服務器認爲他們這樣的!

+1

@JustinPihony我認爲這是不同的。這個問題是關於'varchar'在'time'甚至可用之前存儲一個時間值,並且接受的答案和其他幾個不是SQL Server 2008+ IMHO中的最佳解決方案... – 2012-07-05 18:53:02

回答

4

你不能平均時間因爲時間表示時間,而不是一個時間點。我建議兩種方法之一。

  1. 的首選方法:店時間爲毫秒,微秒,納秒,你有什麼一個整數。這將使您在需要時更精確。

  2. 應用轉換來回,所以你可以平均從午夜,而不是實際的時間值的增量。

DECLARE @x TABLE (ProcessTime TIME(7)); 

INSERT @x VALUES ('00:00:00.0000012'), ('00:00:00.0000016'); 

SELECT DATEADD(NANOSECOND, AVG(DATEDIFF(NANOSECOND, '00:00:00.0000000', ProcessTime)), 
    CONVERT(TIME, '00:00:00.0000000')) 
FROM @x; 

結果:

00:00:00.0000014 

但並不似乎錯的嗎?如果您沒有存儲時間點並且只關注持續時間,請存儲持續時間。顯示時,您可以隨時將其格式化。

+0

Hi Aaron;他們是間隔,因爲它發生;相應的上層實體框架(.NET)數據類型是Timespan!所以我想我需要將間隔轉換爲一個整數用於AVG目的;我認爲這是你在那裏做的。我會給它一個鏡頭。謝謝 – 2012-07-05 18:37:55

+0

完美..金星爲你Aaron – 2012-07-05 18:40:16

+1

間隔尚未在SQL Server中實現;所以當你將它作爲時間存儲時,SQL Server將它視爲一個時間點。如果您希望在未來版本的SQL Server中使用間隔,請投票並將您的商業案例添加爲以下Connect項的註釋:http://connect.microsoft.com/SQLServer/feedback/details/432281/sql-server -doesnt-具有-AN-ANSI-區間數據類型 – 2012-07-05 18:40:18