| 函數 | 說明 | 範例 |
| SYSDATE | 資料庫伺服器當前日期時間 | SELECT SYSDATE FROM DUAL; |
| LAST_DAY(d) | 該月最後一天 | LAST_DAY(SYSDATE) |
| ADD_MONTHS(d,n) | 日期 ± n 月 | ADD_MONTHS(SYSDATE,2) |
| MONTHS_BETWEEN(d1,d2) | 兩日期月差 | MONTHS_BETWEEN(SYSDATE, DATE'2005-11-12') |
| NEXT_DAY(d,'星期X') | d 之後下一個星期 X | NEXT_DAY(SYSDATE,'FRIDAY') |
| CURRENT_DATE | Session 時區當前日期 | SELECT CURRENT_DATE FROM DUAL; |
| CURRENT_TIMESTAMP | Session 時區帶精度時間戳 | SELECT CURRENT_TIMESTAMP FROM DUAL; |
| DBTIMEZONE | 資料庫時區 | SELECT DBTIMEZONE FROM DUAL; |
| EXTRACT(field FROM dt) | 擷取年/月/日/時/分/秒 | EXTRACT(MONTH FROM SYSDATE) |
| LOCALTIMESTAMP | Session 時區無時區時間戳 | SELECT LOCALTIMESTAMP FROM DUAL; |
格式元素完整表(節錄)
YYYY / YY / Y 年份 4/2/1 位
MM 月份 01-12
MON / MONTH 月份縮寫/全寫
DD 月內第幾天
DDD 年內第幾天
DAY / DY 星期全寫/縮寫
HH24 / HH12 24/12 小時制
MI 分鐘
SS 秒
FFn 微秒精度(n=1..9)
實用統計技巧
-- 本月每周五日期
SELECT TO_CHAR(d,'YY-MM-DD') FROM (
SELECT TRUNC(SYSDATE,'MM')+ROWNUM-1 d FROM dba_objects WHERE ROWNUM < 32
) WHERE TO_CHAR(d,'MM')=TO_CHAR(SYSDATE,'MM') AND TRIM(TO_CHAR(d,'DAY'))='FRIDAY';
-- 按周/月/季/年分組統計
SELECT TO_CHAR(dt,'IW') 週, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'IW');
SELECT TO_CHAR(dt,'MM') 月, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'MM');
SELECT TO_CHAR(dt,'Q') 季, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'Q');
SELECT TO_CHAR(dt,'YYYY') 年, COUNT(*) FROM t GROUP BY TO_CHAR(dt,'YYYY');
日期運算鐵律
- 單位為「天」:
SYSDATE + 1 = 明天同一時間。
- 小時/分鐘/秒需折算:
SYSDATE + 3/24(3小時)、SYSDATE + 30/1440(30分)、SYSDATE + 45/86400(45秒)。
- 括號優先:
SYSDATE + (3/24) 避免整數除法截斷。
NLS 參數影響
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TERRITORY='AMERICA'; -- 影響週起始日
- 上一篇文章: LogMiner 日誌分析工具完整使用指南:字典模式、Redo 模式、跨平台限制與 10g 補充日誌
- 下一篇文章: Oracle 按用戶重建索引自動化腳本:生成、分析碎片、排除忙表、定時執行全流程
Copyright ©
程式碼之家 All Rights Reserved