Oracle计算时间差函数
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;
- Android中Context用法详解学习
- 【自然框架】之 “表单控件”与“实体类”
- Android数据存储实现的5大方式
- Android实现图片异步加载操作
- (PDF.NET框架实例讲解)将存储过程映射为实体类
- 【开源】QuickPager ASP.NET2.0分页控件——使用示例、基本应用和查询功能
- 移花接木:当泛型方法遇上抽象类----我的“内存数据库”诞生记
- Android扫描多媒体文件剖析
- Android的进程与线程使用总结
- Android在WebView中加载HTML并实现交互
- 使用ASP.NET MVC2+PDF.NET 构建一个简单的新闻管理程序 示例过程
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】
- Android中Java和JavaScript交互
- Android UI控件系列:TabWidget(切换卡)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HTML知识清单(附学习网站)
- CSS、CSS3知识点清单
- linux使用MAT分析dump文件
- RabbitMQ 自动创建队列/交换器/绑定
- SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
- 又一个布局利器, CSS 伪类 :placeholder-shown
- 聊聊微前端的原理和实践
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type xx.xx.xx.xx(实体类具体路径)
- java基础知识点总结
- Ajax详解(拓展:利用Ajax实现用户名的校验)
- Maven学习笔记
- com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout 的解决
- 基于VSFTPD技术与KindEditor的简单案例
- Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
- Nginx技术(附软件分享)