在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;
解决方法
原文地址:https://www.jb51.cc/mssql/82363.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。