Oracle經常使用日期處理函數有哪些?這些函數能夠實現哪些功能?數據庫
有關日期函數須要瞭解如下幾點:ide
(1)日期函數用於處理DATE類型的數據。函數
(2)在日期上加上或減去一個數字結果仍爲日期。spa
(3)兩個日期相減返回日期之間相差的天數。3d
(4)默認狀況下,日期格式爲DD-MON-RR。blog
(5)查詢當前數據庫日期格式的命令:SELECT SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') FROM DUAL;。it
(6)SYSDATE:該函數返回系統時間。class
(7)LAST_DAY(D):返回指定日期所在月份的最後一天。im
(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