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,也不是离散的时间点!
答案 0 :(得分:4)
您无法平均TIME,因为TIME表示某个时间点,而不是持续时间。我建议采用两种方法之一。
首选方法:将持续时间存储为整数,以毫秒,微秒,纳秒为单位。如果需要,这将使您更加精确。
来回应用转化,以便您可以从午夜而不是实际时间值平均增量。
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
但这对你来说有点不对吗?如果您没有存储时间点并且您只关心持续时间,请存储持续时间。您可以随时将其格式化为显示时间。