Oracle-时间函数-add_months(), last_day(), months_between(), next_day()
Oracle中的常用的时间函数的总结:
--ADD_MONTHS()
一、函数说明:
格式:ADD_MONTHS(DATE, MONTHS)
注:MONTHS 可以是负数,尽量是整数,如果给小数,则正数被截为小于该数的最大整数,负数则被截为大于该数的最小整数
此函数表示在给定的时间 DATE 基础上增加 MONTHS 个月,结果返回一个新的日期。
二、用法实例1:
--从emp表查询列出来公司就职时间超过24年的员工名单
select ename, hiredate from emp where hiredate <= add_months(sysdate, -288);
--负数代表系统时间(sysdate)之前的24年的时间-288 = -24*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);
--查询半年前的时间
select add_months(sysdate,6) from dual;
说明:dual是oracle提供的最小功能表,它只有一行一列
三、用法实例2:
SELECT add_months(to_date('29-02-1996', 'dd-mm-yyyy'),-12.99) FROM dual; --返回 1995-02-28
SELECT add_months(to_date('15-09-1961','dd-mm-yyyy'),1) FROM dual; --返回 1961-10-15
SELECT add_months(to_date('31-10-1961','dd-mm-yyyy'),1) FROM dual; --返回 1961-11-30
SELECT add_months(to_date('31-01-1999','dd-mm-yyyy'),1) FROM dual; --返回 1999-02-28
--LAST_DAY()
一、函数说明:
格式:LAST_DAY(DATE),返回本月的最后一天
注:MONTHS 可以是负数,尽量是整数,如果给小数,则正数被截为小于该数的最大整数,负数则被截为大于该数的最小整数
此函数表示在给定的时间 DATE 基础上增加 MONTHS 个月,结果返回一个新的日期。
二、用法实例1:
SELECT LAST_DAY(SYSDATE) FROM DUAL; --返回 2018-05-31 00:14:18
--MONTHS_BETWEEN()
一、函数说明:
格式:MONTHS_BETWEEN(DATE1, DATE2),用于计算date1,date2之间有几个月
如果date1在日历中比date2晚,那么MONTHS_BETWEEN()就返回一个正数。
如果date1在日历中比date2早,那么MONTHS_BETWEEN()就返回一个负数。
如果date1和date2日期一样,那么MONTHS_BETWEEN()就返回一个0。
二、用法实例1:
SELECT MONTHS_BETWEEN(to_date('2018-05-03', 'yyyy-MM-dd'), to_date('2018-09-11', 'yyyy-MM-dd')) mont FROM DUAL; --返回 -4.25806451612903
在oracle里面,以31天为基数
--NEXT_DAY()
一、函数说明:
格式:NEXT_DAY(SYSDATE, '星期一')或者 NEXT_DAY(SYSDATE, 2),用于计算下一个星期一是几号,Oracle中的星期日是0,星期一是1
二、用法实例1:
SELECT NEXT_DAY(SYSDATE, '星期一') "下周一" FROM DUAL; --返回 2018-05-21 22:11:06