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)
该date_expression参数是DATE值的表达式,可以传入一个日期类型的参数,可以当前系统时间也可以是数据表保存的时间值
该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、参考资料