加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何平均时间间隔?

发布时间:2020-12-12 16:29:23 所属栏目:MsSql教程 来源:网络整理
导读:在Oracle 10g中,我有一个表格,其中显示了某些操作花费多长时间的时间戳.它有两个时间戳字段:starttime和endtime.我想找到这些时间戳给出的持续时间的平均值.我试试: select avg(endtime-starttime) from timings; 但得到: SQL Error: ORA-00932: inconsist
在Oracle 10g中,我有一个表格,其中显示了某些操作花费多长时间的时间戳.它有两个时间戳字段:starttime和endtime.我想找到这些时间戳给出的持续时间的平均值.我试试:
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;

解决方法

最干净的方法是编写自己的聚合函数来执行此操作,因为它将最干净地处理这个(处理子秒分辨率等).

事实上,这个问题在asktom.oracle.com一回((包括源代码))提出(并回答).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读