北方站长站
客服热线:0632-5117766

Oracle DATA的一个常见问题计算时间差

[2008-01-28 04:56:00] 作者:10612 来源:北方站长站

Tags:计算 时间 常见问题 一个 我们 可以 单位 转换 to_number

  

计算时间差是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)- 消逝的时间(以分钟为单位)。

显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的SQL *Plus查询。

SQL> select sysdate-(sysdate-3) from dual;SYSDATE-(SYSDATE-3)------------------- 3

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

Select(sysdate-(sysdate-3.111))*1440fromdual;(SYSDATE-(SYSDATE-3.111))*1440------------------------------4479.83333

当然,我们可以用ROUND函数(即取整函数)来解决这个问题,但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型。

Selectround(to_number(sysdate-(sysdate-3.111))*1440)fromdual;ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440)---------------------------------------------- 4480

我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中。在这个例子里,我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个OracleSTATSPACK USER_LOG扩展表格之中。

Updateperfstat.stats$user_logsetelapsed_minutes =round(to_number(logoff_time-logon_time)*1440)whereuser = user_idandelapsed_minutes is NULL;

(责任编辑:卢兆林)

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

下一篇链接:快速掌握在Oracle 9i中转换时区的方法

上一篇链接:如何为用户提供回滚操作时间的准确评估

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面