在Oracle 10g中,我有一张表,其中包含显示特定操作花费多长时间的时间戳。它有两个时间戳字段:开始时间和结束时间。我想查找这些时间戳的持续时间的平均值。我尝试:如何平均时间间隔?
select avg(endtime-starttime) from timings;
但得到:
SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
这工作:
select
avg(extract(second from endtime - starttime) +
extract (minute from endtime - starttime) * 60 +
extract (hour from endtime - starttime) * 3600) from timings;
但实在是太慢了。
任何更好的方法将间隔转换为秒数或其他方式吗?
编辑: 真正放缓这种情况的原因是我在开始时间之前有一段时间。由于某些原因,这种计算令人难以置信的缓慢。我的根本问题是通过从查询集中消除它们来解决的。我也只是定义的函数来完成这种转换更容易:
FUNCTION fn_interval_to_sec (i IN INTERVAL DAY TO SECOND)
RETURN NUMBER
IS
numSecs NUMBER;
BEGIN
numSecs := ((extract(day from i) * 24
+ extract(hour from i))*60
+ extract(minute from i))*60
+ extract(second from i);
RETURN numSecs;
END;
请注意[自定义pl/sql函数具有显着的性能开销](https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:60122715103602)可能不是适合重度查询。到目前为止, – Vadzim 2015-08-13 09:59:57