前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在oracle中计算时间差

在oracle中计算时间差

作者头像
cloudskyme
发布2018-03-20 10:59:08
2.5K0
发布2018-03-20 10:59:08
举报
文章被收录于专栏:cloudskymecloudskyme

 计算时间差是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使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。

代码语言:javascript
复制
select 
   (sysdate-(sysdate-3.111))*1440 
from 
   dual; 


(sysdate-(sysdate-3.111))*1440 
------------------------------ 
                    4479.83333  

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

代码语言:javascript
复制
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扩展表格之中。

代码语言:javascript
复制
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; 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档