--********************日期函数
--获取当前系统时间
SELECT SYSDATE FROM dual;
获取的是当前系统的时间
--查询距离今天3天后,和3天前的日期
SELECT SYSDATE 今天, SYSDATE-3 三天前, SYSDATE+3 三天后 FROM dual;
--查询出每个员工入职到今天的入职天数,以及十天前每个员工的入职天数
SELECT e.hiredate 入职日期, SYSDATE 今天, SYSDATE-e.hiredate 入职到今天的天数, SYSDATE-10-e.hiredate 十天前的入职天数 FROM emp e;
--使用trunc截取天数
SELECT e.hiredate 入职日期, SYSDATE 今天, trunc(SYSDATE-e.hiredate) 入职到今天的天数, trunc(SYSDATE-10-e.hiredate) 十天前的入职天数 FROM emp e;
--MONTHS_BETWEEN(日期1,日期2)求出2个日期之间的月数
--ADD_MONTHS(日期,数字) 求出在指定日期上加或者减指定的月数,数字,可以为正也可以为负
--NEXT_DAY(日期,星期几)求出下个星期的具体日期
--LAST_DAY(日期 )指定日期的最后一天的日期
--EXTRACT(格式 FROM 日期)将日期分豁,或者计算2个日期的间隔
--ADD_MONTHS(日期,数字)
SELECT SYSDATE 当前日期, add_months(SYSDATE,3) 三个月之后的日期, add_months(SYSDATE,-3) 三个月之前的日期, add_months(SYSDATE,60) 六十个月之后的日期 FROM dual;
--查询所有员工在入职3个月后的日期
SELECT e.empno,e.ename,e.hiredate,add_months(e.hiredate,3)入职三个月的日期 FROM emp e;
--NEXT_DAY(日期,星期几)
SELECT SYSDATE 当前日期, next_day(SYSDATE,'星期五') 下个星期五, next_day(SYSDATE,'星期一') 下个星期一 FROM dual;
--LAST_DAY()一个月的最后一天日期
SELECT SYSDATE,last_day(SYSDATE) FROM dual;
获取当前月的最后一天日期
--查询所有在入职日期在当月最后第三天入职的员工,最后一天-2
SELECT e.empno,e.ename,e.hiredate FROM emp e WHERE e.hiredate=last_day(e.hiredate)-2;
--MONTHS_BETWEEN
--查询每个员工的编号,姓名,入职日期,入职的月数和年份
--月数MONTHS_BETWEEN(SYSDATE,hiredate)年数MONTHS_BETWEEN(SYSDATE,hiredate)/12
SELECT e.empno,e.ename,e.hiredate, trunc(months_between(SYSDATE,e.hiredate)) 入职的月数, trunc(months_between(SYSDATE,e.hiredate)/12) 入职的年数 FROM emp e;
--查询每个员工的编号,姓名,入职日期,已经入职的年份,月份和天数
--总月数,和12求模就是月数
--日用当前日期-(入职日期+月数)
SELECT e.empno,e.ename,e.hiredate, TRUNC(months_between(SYSDATE,e.hiredate)/12) 年, TRUNC(MOD(months_between(SYSDATE,e.hiredate),12)) 月, TRUNC(SYSDATE-add_months(e.hiredate,months_between(SYSDATE,e.hiredate))) 日 FROM emp e;
--extract函数
SELECT SYSDATE, EXTRACT(YEAR FROM SYSDATE)年, EXTRACT(MONTH FROM SYSDATE) 月, EXTRACT(DAY FROM SYSDATE) 日 FROM dual;
--从时间戳中取出年,月,日,时,分,秒
SELECT SYSTIMESTAMP, EXTRACT(YEAR FROM SYSTIMESTAMP)年, EXTRACT(MONTH FROM SYSTIMESTAMP) 月, EXTRACT(DAY FROM SYSTIMESTAMP) 日, EXTRACT(HOUR FROM SYSTIMESTAMP) 时, EXTRACT(MINUTE FROM SYSTIMESTAMP) 分, EXTRACT(SECOND FROM SYSTIMESTAMP) 秒 FROM dual;