Oracle 获取 Timestamp 时间差 毫秒、秒、分钟、小时

最近遇到一个问题,分析API的日志,其中重要的部分是分析API响应时间,其中涉及到计算 Timestamp的时间差,精确到毫秒,搜了到的方法大多都是现将 Timestamp转换成字符串,截取后在分别转换成日期,数字进行计算,十分复杂,而且有的方案并不正确。其实从Oracle 9i起我们有一个很方便的函数可以进行此类运算  extract()函数 函数

extract()函数 用于从一个date或者interval类型中截取到特定的部分

用法:

extract (
        { year | month | day | hour | minute | second }    

        | { timezone_hour | timezone_minute }    

        | { timezone_region | timezone_abbr }    

from { date_value | interval_value } )

我们看一下在实际使用中获取到毫秒级的时间差

SELECT EXTRACT(SECOND FROM(T.END_TIME - T.START_TIME)) * 1000
FROM LOG_T T

这样就可以获取到了

注意:以上方法只能获取到 60 秒内的毫秒差,大于 60 秒的会以 60 秒(分钟) 取余后返回,例如 时间差 119 秒,则 返回 59000 ms ,感谢 qq_21892821 的反馈。

即 在 EXTRACT() 函数中 SECOND By MINUTE取余,MINUTE By HOUR取余,HOUR By DAY取余后返回结果,所以如果有长时间跨度的时间差,可以根据实际情况决定如何累加 日,时,分,秒的差值,实现获取毫秒级的时间差。以下为 时差大于一天的计算方法。

SELECT (EXTRACT(DAY FROM(T.END_TIME - T.START_TIME)) * 24 * 60 * 60 * 1000 +
       EXTRACT(HOUR FROM(T.END_TIME - T.START_TIME)) * 60 * 60 * 1000 +
       EXTRACT(MINUTE FROM(T.END_TIME - T.START_TIME)) * 60 * 1000 +
       EXTRACT(SECOND FROM(T.END_TIME - T.START_TIME)) * 1000) AS MILLISECONDS_DIFF
  FROM LOG_T T;

这个文章是参考 oracle中extract()函数----用于截取年、月、日、时、分、秒 更详细的说明可以查看该文章

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值