round(to_number(end-date-start_date)*1440)- 消逝的时间(以分钟为单位)K7zR{{-:W[本资料来源于贵州学习网 http://www.gzu521.com]K7zR{{-:W 显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的sql *plus查询。 sql> 0select sysdate-(sysdate-3) from dual.
sysdate-(sysdate-3) ------------------- 3 这里,我们看到了oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。 0select (sysdate-(sysdate-3.111))*1440 from dual.
(sysdate-(sysdate-3.111))*1440 ------------------------------ 4479.83333 当然,我们可以用round函数(即取整函数)来解决这个问题,但是要记住我们必须首先把date数据类型转换成number数据类型。 0select 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扩展表格之中。 0update perfstat.stats$user_log set elapsed_minutes = round(to_number(logoff_time-logon_time)*1440) where user = user_id and elapsed_minutes is null.