4
ProcessTime: 00:00:00.0000012
RegexResolveTime: 00:00:00.0000421
MessageResolveTime: 00:00:00.0001269 
FullProcessTime: 00:00:00.0001734

好的,我上面有 4 列 datatype Time(7)。我需要获取这些单独列的所有条目的平均值,但Time(7)它不是AVG运算符的有效类型!

如何获得一Time(7)列的平均值?

我要补充一点,这些是时间跨度,而不是离散的时间点,即使 SQL 服务器认为它们是这样的!

4

1 回答 1

4

您不能平均 TIME,因为 TIME 代表一个时间点,而不是持续时间。我建议两种方法之一。

  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

但这在你看来是不是错了?如果您不存储时间点并且只关心持续时间,请存储持续时间。显示时始终可以将其格式化为时间。

于 2012-07-05T18:34:03.890 回答