Oracle中如何计算耗时(秒级)的标准差?
计算时间差的标准差并转换为秒
要把时间差的标准差从天数转换为秒,直接将时间差乘以86400(一天的总秒数:24×60×60)即可,这是Oracle中处理DATE类型时间差转秒数的标准方法:
SELECT STDDEV((end_proc_dt - start_proc_dt) * 86400) AS stddev_elapsed_seconds FROM PROC_STAT ps WHERE proc_id = 5350;
之前尝试失败的原因
- CAST为NUMBER的问题:你只是调整了天数数值的精度,并没有转换单位,结果还是天数的标准差,当然不是你要的秒数。
- EXTRACT(SECOND)报错的原因:
end_proc_dt - start_proc_dt得到的是数值类型(代表天数),而非INTERVAL或TIMESTAMP类型,EXTRACT函数只能提取INTERVAL、TIMESTAMP这类时间类型的分量,所以会报错。如果非要用EXTRACT,得先把时间差转成INTERVAL类型,比如:
SELECT STDDEV(EXTRACT(SECOND FROM NUMTODSINTERVAL(end_proc_dt - start_proc_dt, 'DAY'))) AS stddev_elapsed_seconds FROM PROC_STAT ps WHERE proc_id = 5350;
不过这种方式绕了弯路,直接乘以86400更简洁高效。
内容的提问来源于stack exchange,提问作者Travis Heeter
相关产品推荐
相关产品推荐

