获取平均时间(7)

时间:2012-07-05 18:20:55

标签: sql sql-server tsql average

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)列的平均值?

我补充说,即使SQL服务器认为这些是Timespans,也不是离散的时间点!

1 个答案:

答案 0 :(得分:4)

您无法平均TIME,因为TIME表示某个时间点,而不是持续时间。我建议采用两种方法之一。

  1. 首选方法:将持续时间存储为整数,以毫秒,微秒,纳秒为单位。如果需要,这将使您更加精确。

  2. 来回应用转化,以便您可以从午夜而不是实际时间值平均增量。

  3. 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
    

    但这对你来说有点不对吗?如果您没有存储时间点并且您只关心持续时间,请存储持续时间。您可以随时将其格式化为显示时间。