博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle计算时间差函数
阅读量:6817 次
发布时间:2019-06-26

本文共 2923 字,大约阅读时间需要 9 分钟。

1、months_between(date1,date2)  返回两个日期之间的月份的差值

(1)、如果两个日期月份内天数相同,或者都是某个月的最后一天,返回一个整数。否则,返回数值带小数

select months_between(sysdate,addtime)as diff_month from test6

 

2、interval   时间间隔函数

Oracle语法: 

INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}] 

该数据类型常用来表示一段时间差, 注意时间差只精确到年和月. precision为年或月的精确域, 有效范围是0到9, 默认值为2. 

i、

select INTERVAL '123-2' YEAR(3) TO MONTH from dual

表示: 123年2个月, "YEAR(3)" 表示年的精度为3, 可见"123"刚好为3为有效数值, 如果该处YEAR(n), n<3就会出错, 注意默认是2. 

 

ii、

select INTERVAL '4' YEAR   from dual

表示: 4年, 同 INTERVAL '4-0' YEAR TO MONTH 是一样的-----表示4年

 

iii、

select INTERVAL '50' MONTH  from dual;

表示: 50个月, 同 INTERVAL '4-2' YEAR TO MONTH 是一样  ----- 表示4年2个月

 

vi、

select (interval '3-6' year)+(interval '6' month)  from dual

表示:3年6个月加上6个月=4年

 

3、利用Interval可以实现时间的差值运算,而不用借助于工具函数如month,前提是进行运算的字段必须是date类型

当前时间减去7分钟的时间

select sysdate,sysdate - interval '7' MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual
当前时间减去7天的时间
select sysdate - interval ’7’ day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual

select addtime,(addtime - interval '7' YEAR) from test6

含义解释:

Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中

比如,我要获得系统时间,则用“select sysdate from dual” 则返回系统当前的时间:2008-11-07 9:32:49,不同系统可能返回日期的格式不一样。"select user from dual"则返回当前连接的用户。如果是"select 1+2 from dual",则返回结果:3

 

4、利用两个日期相减,并通过TO_NUMBER和ROUND函数计算得到时间差  不精确的计算方法

i、天:

SELECT ROUND(TO_NUMBER(sysdate-addtime)) from test6

ii、小时

SELECT ROUND(TO_NUMBER(sysdate-addtime))*24 from test6

iii、分钟

SELECT ROUND(TO_NUMBER(sysdate-addtime))*24*60 from test6

秒:ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)毫秒:ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000)

 当然这样算出来的结果不是很准确,只是粗略的计算,因为当中使用到了ROUND进行了四舍五入!!!

 

5、利用TO_CHAR和Interval得到的系统事件减去一段时间间隔,并返回精确时间

select sysdate,TO_CHAR(sysdate - interval '4-2' YEAR TO MONTH - interval '1' day,'yyyy/mm/dd hh24:mi:ss') from dual

 

 6、真正精确的计算两个date类型的日期的间隔,利用trunc函数,注意是:date类型,当然如果你的日期类型定义成timespan当然就不用这么麻烦了!!!

i、计算两个日期的秒间隔

select 86400*(sysdate-addtime)-60*(trunc((86400*(sysdate-addtime))/60)) from test6

 

 

ii、计算两个日期的分钟间隔   注意:这里的分钟间隔要考虑到秒的问题,这里舍弃秒,因为上面已经计算出秒的差值了

SELECT sysdate,addtime from test6;select trunc(1440*(sysdate-addtime)-60*trunc(1440*(sysdate-addtime)/60)) from test6

iii、计算两个日期的小时间隔,同样这里要舍弃秒和分钟,不采取四舍五入,因为上面已经计算出差值了

select sysdate,addtime from test6;select trunc((sysdate-addtime)*24-24*trunc((sysdate-addtime)*24/24)) from test6;

vi、计算两个日期的周的间隔

SELECT sysdate,addtime from test6;select trunc((sysdate-addtime)/7) from test6

 

vii、计算两个日期的天的差距

SELECT sysdate,addtime from test6;select trunc(sysdate-addtime) from test6

 

由于每个月的天数无法给出一个确切值,所以无法通过上面的算法给出月份的差距,但是可以通过months_between函数获得

SELECT sysdate,addtime from test6;select trunc(months_between(sysdate,addtime)) from test6;

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/GreenLeaves/p/6548285.html

你可能感兴趣的文章
2015年4月与5月
查看>>
C++ 二叉树遍历实现
查看>>
分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下...
查看>>
[mysql] linux下使用yum安装mysql
查看>>
Android异步处理系列文章四篇之四 AsyncTask的实现原理
查看>>
android-betterpickers
查看>>
linux -- Ubuntu开启root账户,并切换到root用户登陆
查看>>
直接插入排序法
查看>>
SQL Server :理解IAM 页
查看>>
索引深入浅出(0/10):索引深入浅出的聚集索引页
查看>>
STM32 对内部FLASH读写接口函数(转)
查看>>
从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
查看>>
给WebAPI的REST接口添加测试页面(二)
查看>>
Asp.net中GridView使用详解(引)【转】
查看>>
Objective-C语法之扩展(Extension)的使用
查看>>
ZOJ 3819 Average Score(数学 牡丹江游戏网站)
查看>>
支持向量机的优缺点
查看>>
mongodump备份数据库
查看>>
用DMA直接驱动GPIO,实现GPIO最高输出速率(转)
查看>>
[Python] 学习笔记之MySQL数据库操作
查看>>