当前位置: 首页 > news >正文

oracle 日期

日期加减

Oracle中日期进行加减可以使用多种方式,以下介绍三种
一种是针对天的操作,适用于对日,时,分,秒的操作,
一种是对月的操作,适用于月,年的操作,
一种是使用INTERVAL函数,适用于年,月,日,时,分,秒的操作

直接加减数字

  • 加一天
select sysdate "当前时间",sysdate+1 "当前时间加一天" from dual ;

结果:

2023-11-02 17:09:46	|	2023-11-03 17:09:46

灵活使用

SELECTSYSDATE "当前时间",SYSDATE + 1 "加一天",SYSDATE + (1 / 24) "加一小时",SYSDATE + (1 / 24 / 60) "加一分钟",SYSDATE + (1 / 24 / 60 / 60) "加一秒钟",SYSDATE - 1 "减一天"
FROMdual;

结果:

2023-11-02 17:14:41	|	2023-11-03 17:14:41	|	2023-11-02 18:14:41	|	2023-11-02 17:15:41	|	2023-11-02 17:14:42	|	2023-11-01 17:14:41

通过ADD_MONTHS()函数

  • 加一个月
select sysdate "当前时间",ADD_MONTHS(sysdate, 1) "加一月" from dual ;

结果

2023-11-02 17:18:31	|	2023-12-02 17:18:31

灵活使用

SELECTSYSDATE "当前时间",ADD_MONTHS (SYSDATE, 1) "加一月",ADD_MONTHS (SYSDATE, - 1) "减一月",ADD_MONTHS (SYSDATE, 1 * 12) "加一年",ADD_MONTHS (SYSDATE, - 1 * 12) "减一年"
FROMdual;

结果:

2023-11-02 17:20:09	2023-12-02 17:20:09	2023-10-02 17:20:09	2024-11-02 17:20:09	2022-11-02 17:20:09

使用INTERVAL函数

语法:INTERVAL ‘时间差数值’ { YEAR | MONTH | DAY | HOUR | MINUTE | SECODE} (精度数值)

得出的是相应类型的时间差,注意精度数值范围是1-9,不写默认值是2,精度不匹配时间差数值会报错
例如:当前时间加1,11,111年

SELECTSYSDATE "当前时间",SYSDATE + INTERVAL '1' YEAR "加1年",          -- 精度数值不写时是默认两位,此处可以写精度为1-9SYSDATE + INTERVAL '11' YEAR "加11年",        -- 此处可以不写,可以是1-9SYSDATE + INTERVAL '11' YEAR(2) "加11年",     -- 可以写2-9SYSDATE + INTERVAL '111' YEAR(3) "加111年",   -- 此处必须写精度,精度值3-9SYSDATE + INTERVAL '111' YEAR (9) "加111年"   -- 精度值可以大于当前精度,不能小于当前数值精度,不能超过9
FROMdual;

结果:

2023-11-02 17:22:22	2024-11-02 17:22:22	2034-11-02 17:22:22	2034-11-02 17:22:22	2134-11-02 17:22:22	2134-11-02 17:22:22

灵活运用

SELECTSYSDATE "当前时间",SYSDATE + INTERVAL '1' YEAR "加一年",SYSDATE + INTERVAL '-1' YEAR "减一年",SYSDATE + INTERVAL '1' MONTH "加一月",SYSDATE + INTERVAL '1' DAY "加一天",SYSDATE + INTERVAL '1' HOUR "加一小时",SYSDATE + INTERVAL '1' MINUTE "加一分钟",SYSDATE + INTERVAL '1' SECOND "加一秒"
FROMdual;

结果

2023-11-02 17:25:31	2024-11-02 17:25:31	2022-11-02 17:25:31	2023-12-02 17:25:31	2023-11-03 17:25:31	2023-11-02 18:25:31	2023-11-02 17:26:31	2023-11-02 17:25:32

精度的使用同上,当然oracle数据库对于时间大小也是有限制的,年份范围是 -4713 和 +9999 之间, 且不为 0

计算两个日期间隔的天数、月数和年数

天数

在Oracle中,两个日期直接相减,便可以得到天数;

select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dual;返回结果:36

月数

计算月数,需要用到months_between函数;

--months_between(date1,date2)   
--如果两个日期中“日”相同,或分别是所在月的最后一天,那么返回的结果是整数。否则,返回的结果将包含一个分数部分(以31天为一月计算)     
select months_between(to_date('01/31/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;      
返回结果: 1    select months_between(to_date('01/01/2015','mm/dd/yyyy'),to_date('12/31/2014','mm/dd/yyyy')) "MONTHS" FROM DUAL;      
返回结果: 0.032258064516129
select abs(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
select ceil(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;
select floor(trunc(months_between(sysdate , to_date('01/31/2015','mm/dd/yyyy'))))from dual;

年数

计算年数,是通过计算出月数,然后再除以12;(也许会有更好的办法,目前还不知道)

select trunc(months_between(to_date('08/06/2015','mm/dd/yyyy'),to_date('08/06/2013','mm/dd/yyyy'))/12) from dual;--返回结果:2
http://www.lryc.cn/news/215900.html

相关文章:

  • JVM堆内存解析
  • C#Onnx模型信息查看工具
  • RK3588 ubuntu系统安装opencv
  • 常用的vue UI组件库
  • 防范欺诈GPT
  • 【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)
  • STM32:使用蓝牙模块
  • Blazor 虚拟滚动/瀑布流加载Table数据
  • 数字化浪潮下,AI数字人融入多元化应用场景
  • JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些
  • 我应该删除低质量页面以提高Google排名吗?
  • 【实战Flask API项目指南】之六 数据库集成 SQLAlchemy
  • MFC网络通信-Udp服务端
  • 最简单且有效的msvcp140.dll丢失的解决方法,有效的解决msvcp140.dll丢失
  • HBase理论与实践-基操与实践
  • 内存管理设计精要
  • Java——StringBuffer与StringBuilder的区别
  • 基于深度学习的菠萝与果叶视觉识别及切断机构设计
  • springboot整合七牛云oss操作文件
  • 跨国传输的常见问题与对应解决方案
  • Git(七).git 文件夹瘦身,GitLab 永久删除文件
  • 多线程锁的升级原理是什么
  • 金山文档轻维表之删除所有行记录
  • 站坑站坑站坑站坑站坑
  • 在Vue中,你可以使用动态import()语法来动态加载组件
  • 金蝶云星空表单插件获取日期控件判空处理(代码示例)
  • 通过xshell传输文件到服务器
  • centos7.9编译安装python3.7.2
  • 【教3妹学编程-算法题】2913. 子数组不同元素数目的平方和 I
  • 是否会有 GPT-5 的发布?