會話的 NLS_LANGUAGE 影響日期顯示語言(月份縮寫等)。範例:
SELECT * FROM nls_session_parameters WHERE rownum < 4;
-- 修改語言
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
DD-MON-YYYY(如 09-MAY-15 實際儲存 4 位年)。DD-MON-YY。DATE 'YYYY-MM-DD'。CREATE TABLE t(t DATE);
INSERT INTO t VALUES ('09-MAY-15');
INSERT INTO t VALUES (DATE '1994-08-25');
INSERT INTO t VALUES (DATE '1994-08-20');
SELECT * FROM t;
-- 輸出: 09-MAY-15, 25-AUG-94, 20-AUG-94
SELECT TO_CHAR(t, 'DD-MON-YYYY') FROM t;
-- 09-MAY-2015, 25-AUG-1994, 20-AUG-1994
SELECT TO_CHAR(t, 'MON-DD-YYYY') FROM t;
-- MAY-09-2015, AUG-25-1994, AUG-20-1994
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY,HH24:MI:SS') FROM DUAL;
-- 09-MAY-2015,23:58:54
-- 錯誤:格式不符預設 DD-MON-YY
SELECT TO_DATE('MAY-6-2015') FROM DUAL; -- ORA-01858
-- 正確:符合預設格式
SELECT TO_DATE('5-MAY-2015') FROM DUAL; -- 05-MAY-15
-- 明確指定格式
SELECT TO_DATE('5-MAY-2015 9:50:45', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL;
-- 組合使用:轉換後再格式化輸出
SELECT TO_CHAR(TO_DATE('5-MAY-2015 9:50:45', 'DD-MON-YYYY HH24:MI:SS'), 'MON-DD-YYYY HH24:MI:SS') FROM DUAL;
-- MAY-05-2015 09:50:45
ALTER SESSION SET NLS_DATE_FORMAT = 'MON-DD-YYYY';
SELECT SYSDATE FROM DUAL; -- MAY-10-2015
YY:兩位年份視為當前世紀。
RR:依規則推算世紀:
| 指定年份後兩位 (Z2) | 當前年份後兩位 (F2) | 推算世紀 |
|---|---|---|
| 00-49 | 00-49 | 同世紀 (F2) |
| 50-99 | 00-49 | 上一世紀 (F2-1) |
| 00-49 | 50-99 | 下一世紀 (F2+1) |
| 50-99 | 50-99 | 同世紀 (F2) |
SELECT TO_CHAR(TO_DATE('05-MAY-15', 'DD-MM-RR'), 'DD-MM-YYYY') FROM DUAL; -- 05-05-2015
SELECT TO_CHAR(TO_DATE('05-MAY-65', 'DD-MM-RR'), 'DD-MM-YYYY') FROM DUAL; -- 05-05-1965