核心概念
NLS_DATE_LANGUAGE 控制日期格式化輸出時「月份名稱」與「星期名稱」的顯示語言。可在 Session 層級動態調整,不影響資料儲存。
查看當前 NLS 參數
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER LIKE '%DATE%';
實戰演示:中英文切換
設定為繁體中文(SIMPLIFIED CHINESE 亦可)
ALTER SESSION SET NLS_DATE_LANGUAGE = 'SIMPLIFIED CHINESE';
-- 或 ALTER SESSION SET NLS_DATE_LANGUAGE = 'TRADITIONAL CHINESE';
SELECT TO_CHAR(SYSDATE, 'yyyy-Mon-day') FROM DUAL;
-- 結果:2009-5月 -星期三
設定為英文
ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';
SELECT TO_CHAR(SYSDATE, 'yyyy-Mon-day') FROM DUAL;
-- 結果:2009-May-wednesday
常用語言代碼對照
| 語言 | NLS_DATE_LANGUAGE 值 | 月份範例 | 星期範例 |
| 美式英文 | AMERICAN | JAN, FEB, MAR... | MONDAY, TUESDAY... |
| 簡體中文 | SIMPLIFIED CHINESE | 1月, 2月... | 星期一, 星期二... |
| 繁體中文 | TRADITIONAL CHINESE | 1月, 2月... | 星期一, 星期二... |
| 日文 | JAPANESE | 1月, 2月... | 月曜日, 火曜日... |
| 德文 | GERMAN | JAN, FEB... | MONTAG, DIENSTAG... |
| 法文 | FRENCH | JANV, FEVR... | LUNDI, MARDI... |
應用場景
- 多語系報表輸出:同一 SQL,切換 Session 參數即可產出不同語言報表
- 跨國團隊協作:開發/測試/生產環境統一語言設定
- 資料匯出:依客戶語言需求動態調整日期顯示格式
相關參數
| 參數 | 影響範圍 |
NLS_DATE_FORMAT | 預設日期格式(如 'YYYY-MM-DD HH24:MI:SS') |
NLS_TIMESTAMP_FORMAT | 預設時間戳格式 |
NLS_TERRITORY | 地區設定(影響週起始日、數字/貨幣格式) |
NLS_LANGUAGE | 訊息語言、月份/星期名稱(含 DATE_LANGUAGE) |
最佳實踐
- 應用層明確指定
TO_CHAR(date, 'fmt', 'NLS_DATE_LANGUAGE=AMERICAN'),避免依賴 Session 設定
- 資料庫層級設定
NLS_DATE_LANGUAGE 為系統預設語言
- 跨語言系統儲存時一律用 DATE/TIMESTAMP 型別,勿存格式化字串