备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 Nicky's blog Oracle系列之add_months简介以及用法归纳教程
2 0

海报分享

Oracle系列之add_months简介以及用法归纳教程

Oracle系列之add_months简介以及用法归纳教程

最近遇到一个SQL统计,需要遇到获取某个日期n个月后的日期,比如统计入职时间超过2年的员工信息

如果不依靠Oracle函数,自己去写有点麻烦,不过通过网上资料,找到Oracle官方提供的add_months函数

1、函数定义

add_months:函数将一个月数(n)添加到一个日期,并返回相隔n月的同一天

官网的图示:

图片来自官网: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions004.htm

2、函数语法

语法:

ADD_MONTHS(date_expression, month)
  • 1) date_expression

该date_expression参数是DATE值的表达式,可以传入一个日期类型的参数,可以当前系统时间也可以是数据表保存的时间值

  • 2) month

该month参数是一个整数,表示添加的月份数。该month参数可以是零,正或负。正月份值使您可以按月前进到一个日期值,而负月份值可以使您向后退到一个日期值。

3、使用例子

  • 查询出半年前的时间
   select add_months(sysdate,-6) from dual;

ps:dual是Oracle的系统表,其只有一行一列

  • 查询出半年后的时间
   select add_months(sysdate,6) from dual;
  • 获取上个月的最后一天
SELECT
  LAST_DAY( ADD_MONTHS(SYSDATE , - 1 ) )
  dual;
  • 从emp表查询列出来公司就职时间超过2年的员工名单
     select ename, hiredate
              from emp
             where hiredate <= add_months(sysdate, -2*12);

OR

  select ename, hiredate
              from emp
             where sysdate >= add_months(hiredate , -2*12);
  • 查询出在员工’SCOTT’入职一年后入职的员工的信息
select ename, a.hiredate, sal
              from emp a, (select hiredate from emp where ename = 'SCOTT') b
             where a.hiredate > = add_months(b.hiredate, 12);

4、注意要点

如果date_expression是该月的最后一天,则结果日期始终是该月的最后一天,例如,例如,将1个月添加到2021年2月28日将得出2021年3月31日,而不是2021年3月28日

使用add_months函数,有时候需要结合SYSDATE或者dual表使用

5、参考资料

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客: https://blog.csdn.net/u014427391 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。