- 日期 + 数字 = 日期,表示若干天之后的日期;
- 日期 – 数字 = 日期,表示若干天之前的 日期;
- 日期 – 日期 = 数字,表示两个日期之间的隔天。
- 计算两个日期之间所经历的月数: MONTHS_BETWEEN( 日期 1 | 列 1,日期 2 | 列 2)
- 加上指定月之后的日期:ADD_MONTHS(日期|列,月数)
- 求出指定的下一个一周时间数的日期:日期 NEXT_DAY(日期|列,一周时间数)
- sql> select next_day(sysdate,'星期一') from dual;
- NEXT_DAY(SYSDA
- --------------
- 08-8月 -16
- 求出指定日期所在月的最后一天日期:日期 LAST_DAY(日期|列)
- sql> select LAST_DAY(SYSDATE) FROM dual;
- LAST_DAY(SYSDA
- --------------
- 31-8月 -16
举例1:对雇员表emp(eno,ename,hiredate,sal),计算每一位雇员到今天为止的雇佣年限。
例如:今天是2016年08月12日,JOHN雇佣日期是:1981年06年09日,那么到今天他已经在公司服务了35年、2个月、3天。
思路:
第一步: 计算出每一位雇员到今天为止的佣年份,直接利用月数除 12
SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year FROMemp;
第二步: 计算月 ,在进行年的时候发现存有小数,这些就包含了月
SELECT ename,hiredate)/12) year,
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) months
FROM emp;
第三步: 计算天数,对于计算天数,实际上只学会了一个公式“日期 1 – 日期 2 = 天数”,于是分析日期:
日期 1:应该是当前日期“ SYSDATE”;
日期 2:应该是已经剔除掉了过月之后的日期。
SELECT ename,
TRUNC(MONTHS_BETWEEN(SYSDATE,12)) months
TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) day
FROM emp;
举例2:查询出在每个雇员佣所月倒数第二天的全部信息SELECT ename,LAST_DAY(hiredate)-2 FROM emp WHERE LAST_DAY(hiredate)-2 =hiredate;