日期處理是業務開發高頻操作。本文匯總 7 大類常用日期函數與格式模型,含年月日提取、字符串雙向轉換、時間截斷、星期/年周計算,適合新手速查與老手複核。
SELECT EXTRACT(YEAR FROM SYSDATE) AS year,
EXTRACT(MONTH FROM SYSDATE) AS month,
EXTRACT(DAY FROM SYSDATE) AS day
FROM dual;
SELECT TO_CHAR(SYSDATE, 'YYYY') AS year, -- 4位年
TO_CHAR(SYSDATE, 'MM') AS month, -- 2位月
TO_CHAR(SYSDATE, 'DD') AS day -- 2位日
FROM dual;
TO_DATE('2010-12-21', 'YYYY-MM-DD'); -- 標準格式
TO_DATE('2010-12-21', 'DAY MM/DD/YYYY'); -- 含星期名,不區分大小寫
-- 某天星期幾
SELECT TO_CHAR(TO_DATE('2010-12-21','YYYY-MM-DD'), 'DAY') FROM dual;
-- 系統當前時間
SELECT SYSDATE FROM dual;
-- 去除時分秒(保留日期部分)
SELECT TRUNC(SYSDATE, 'DD') FROM dual;
| 模型 | 含義 | 示例輸出 |
|---|---|---|
| YYYY / RRRR | 4位年 | 2024 |
| MM / MON / MONTH | 月份 數字/縮寫/全寫 | 12 / DEC / DECEMBER |
| DD / DDD | 月內第幾天 / 年內第幾天 | 21 / 356 |
| DAY / DY / D | 星期全寫 / 縮寫 / 數字(1-7) | TUESDAY / TUE / 3 |
| WW / IW | 年內第幾周 / ISO周 | 51 / 52 |
| HH24 / MI / SS | 時(24制) / 分 / 秒 | 14 / 30 / 59 |
| AM / PM | 上午/下午標記 | PM |
ADD_MONTHS(date, n):月份加減,自動處理月末MONTHS_BETWEEN(d1, d2):月差值NEXT_DAY(date, 'FRIDAY'):下一個指定星期幾LAST_DAY(date):當月最後一天ROUND(date, 'MONTH'):按月四捨五入(16日後進下月)建議:業務代碼中禁止隱式轉換,統一使用 TO_DATE/TO_CHAR 顯式指定格式模型,避免 NLS 環境差異導致 Bug。