INSERT INTO test VALUES (2, 'cba', SYSDATE);
-- SYSDATE 回傳 DATE 型別,含年月日時分秒,無時區資訊
SELECT * FROM dg_order
WHERE DATE_XD_DR >= TO_DATE('2009-11-01 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND DATE_XD_DR < TO_DATE('2009-11-02 00:00:00','YYYY-MM-DD HH24:MI:SS');
關鍵技巧:使用 >= 當天 00:00:00 且 < 翌日 00:00:00,避免 BETWEEN 邊界含秒問題,亦可利用索引範圍掃描。
只要格式模型與輸入字串一一對應,分隔符(-、/、;、,)可任意混用:
| 輸入字串 | 格式模型 | 結果 |
|---|---|---|
'2009/11/01 12:00:00' | 'YYYY-MM-DD HH24:MI:SS' | 成功 |
'2009;11;01 12:00:00' | 'YYYY-MM-DD HH24:MI:SS' | 成功 |
'2009,11/01 12:00:00' | 'YYYY-MM-DD HH24:MI:SS' | 成功 |
'2009-11-01 12:00:00' | 'YYYY-MM-DD HH24:MI:SS' | 成功 |
'2009/11-01 12:00:00' | 'YYYY;MM-DD HH24:MI:SS' | 成功 |
Oracle 解析時僅比對數字欄位順序與長度,分隔符被忽略,極大提升 ETL 容錯率。
SYSTIMESTAMP:含毫秒與時區的 TIMESTAMP WITH TIME ZONE。CURRENT_DATE / CURRENT_TIMESTAMP:Session 時區時間。TRUNC(SYSDATE):當天 00:00:00。ADD_MONTHS(TRUNC(SYSDATE),-1):上月同一天 00:00:00。