TO_DATE、TO_CHAR 格式模型決定字串與日期互轉成敗。本文整理最常用格式元素與實例,供快速查閱。
| 元素 | 意義 | 範例輸入/輸出 |
|---|---|---|
| YYYY | 4 位數年 | 2024 |
| YY / RR | 2 位數年(RR 跨世紀邏輯) | 24 / 24 |
| MM | 月份 01-12 | 01 |
| MON / MONTH | 月份縮寫/全名 | JAN / JANUARY |
| DD | 月內天數 01-31 | 15 |
| DDD | 年內天數 001-366 | 045 |
| DAY / DY | 星期全名/縮寫 | MONDAY / MON |
| HH24 / HH12 | 24/12 小時制 | 14 / 02 |
| MI | 分鐘 00-59 | 30 |
| SS | 秒 00-59 | 59 |
| FF / FF6 | 小數秒(微秒/奈秒) | .123456 |
| AM / PM | 子午線標記 | PM |
| TZD / TZH:TZM | 時區名/位移 | CST / +08:00 |
-- 字串轉日期
TO_DATE('2024-01-15 14:30:59', 'YYYY-MM-DD HH24:MI:SS')
TO_DATE('15-JAN-2024', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=AMERICAN')
-- 日期轉字串
TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS')
TO_CHAR(hire_date, 'FMMonth DD, YYYY') -- FM 去除前導空白
-- NLS 參數影響
TO_DATE('01-一月-24', 'DD-MON-RR', 'NLS_DATE_LANGUAGE=TRADITIONAL CHINESE')
RR vs YY:RR 依當前世紀推算(50-99→19xx, 00-49→20xx),YY 直接取當前世紀前兩碼。ORA-018xx,建議先用 TO_CHAR 驗證樣本。NLS_DATE_FORMAT,跨環境易出錯,永遠顯式指定格式。日期格式模型看似瑣碎,實則是跨系統資料交換、ETL 清洗、報表呈現的基石,熟記核心元素可省去無數除錯時間。