Oracle常用日期处理函数有哪些?这些函数可以实现哪些功能?
答案部分
有关日期函数需要了解以下几点:
(1)日期函数用于处理DATE类型的数据。
(2)在日期上加上或减去一个数字结果仍为日期。
(3)两个日期相减返回日期之间相差的天数。
(4)默认情况下,日期格式为DD-MON-RR。
(5)查询当前数据库日期格式的命令:SELECT SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') FROM DUAL;。
(6)SYSDATE:该函数返回系统时间。
(7)LAST_DAY(D):返回指定日期所在月份的最后一天。
(8)MONTHS_BETWEEN:表示两个日期的月份之差,即在给定的两个日期之间有多少个月。
(9)ADD_MONTHS(D,N):该函数将给定的日期增加N个月。当N为正数时,该函数将给定的日期增加N个月,为负数时减去N个月,该函数很常用,可以用来表示上个月、下个月,去年和下一年等等。
(10)NEXT_DAY(D,N):返回以时间点D为基准(开始),下一个“目标日N”的日期。
由于数据库以数字方式存储日期,因此,日期类型可以进行算术运算(加法或减法)。例如:可以给日期增加或减去一个数字,得到的结果还是一个日期值,两个日期相减,得到两个日期之间的天数,用小时除以24就可以得到天数。
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;--求月份
SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE), -1), 'YYYY-MM') FROM DUAL;--上一个月
SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE), 1), 'YYYY-MM') FROM DUAL;--下一个月
SELECT SYSDATE,ADD_MONTHS(SYSDATE, -12) FROM DUAL;--去年
SELECT EMPNO,HIREDATE,MONTHS_BETWEEN(SYSDATE,HIREDATE)/12 YEARS FROM SCOTT.EMP;
另外,日期中常用到的一个修改日期语言的SQL:
修改为英文:ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
修改为中文:ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
在英语的环境中,查询星期时要用英文,示例代码如下所示:
SYS@lhrdb21> SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;
SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL
*
ERROR at line 1:
ORA-01846: not a valid day of the week
SYS@lhrdb21> ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
会话已更改。
SYS@lhrdb21> SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;
NEXT_DAY(SYSDATE,'
-------------------
2016-09-13 09:32:58
判断当天是否月份最后一天的代码如下所示:
SYS@lhrdb21> WITH T AS
2 (SELECT SYSDATE DAT FROM DUAL)
3 SELECT DECODE(DAT, LAST_DAY(DAT), 'YES', 'NO') FROM T;
DEC
---
NO
SYS@lhrdb21> SELECT SYSDATE FROM DUAL;
SYSDATE
-------------------
2016-09-09 09:33:56