zoukankan      html  css  js  c++  java
  • 在oracle中计算时间差

     计算时间差是oracle data数据类型的一个常见问题。oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。

    一旦你发现了时间差异,你可以使用简单的技巧来以天、小时、分钟或者秒为单位来计算时间差。为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏。

    使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法。
    round(to_number(end-date-start_date))- 消逝的时间(以天为单位)

    round(to_number(end-date-start_date)*24)- 消逝的时间(以小时为单位)

    round(to_number(end-date-start_date)*1440)- 消逝的时间(以分钟为单位)K7zR{{-:W[本资料来源于贵州学习网 http://www.gzu521.com]K7zR{{-:W
    显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的sql *plus查询。
    sql> select sysdate-(sysdate-3) from dual;

    sysdate-(sysdate-3)
    -------------------
                      3 
    这里,我们看到了oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。
    select
       (sysdate-(sysdate-3.111))*1440
    from
       dual;


    (sysdate-(sysdate-3.111))*1440
    ------------------------------
                        4479.83333 
    当然,我们可以用round函数(即取整函数)来解决这个问题,但是要记住我们必须首先把date数据类型转换成number数据类型。
    select
       round(to_number(sysdate-(sysdate-3.111))*1440)
    from
       dual;

    round(to_number(sysdate-(sysdate-3.111))*1440)
    ----------------------------------------------
                                              4480 
    我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入oracle表格中。在这个例子里,我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个oracle statspack user_log扩展表格之中。
    update
       perfstat.stats$user_log
    set
       elapsed_minutes =
       round(to_number(logoff_time-logon_time)*1440)
    where
       user = user_id
    and
       elapsed_minutes is null; 

    作者:张锋
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章可以观注
    微信公众号 soft张三丰

    微信交流群,添加群主微信,邀请入群
  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/skyme/p/1900945.html
Copyright © 2011-2022 走看看