核心語法
TRUNC(date_expr [, fmt])
-- fmt 省略默認 'DD' (截取到當天 00:00:00)
13 種實戰格式模板速查表
| 格式模型 | 含義 | 示例結果 (假設 2024-03-25 14:30:45) |
CC / SCC | 世紀首日 | 2001-01-01 00:00:00 |
YYYY / YEAR | 年首日 | 2024-01-01 00:00:00 |
Q | 季度首日 | 2024-01-01 00:00:00 |
MM / MONTH / RM | 月首日 | 2024-03-01 00:00:00 |
WW | 年初第 1 天同週首日 | 2024-03-18 00:00:00 |
IW | ISO 週首日 (週一) | 2024-03-25 00:00:00 |
W | 當月 1 號同週首日 | 2024-03-25 00:00:00 |
DD / DDD / J | 當天 0 時 (默認) | 2024-03-25 00:00:00 |
DAY / DY / D | 本週首日 (週日) | 2024-03-24 00:00:00 |
HH24 / HH12 | 整點 | 2024-03-25 14:00:00 |
MI | 整分 | 2024-03-25 14:30:00 |
常用組合技
-- 本月最後一天
TRUNC(LAST_DAY(SYSDATE), 'DD')
-- 下月第一天
TRUNC(ADD_MONTHS(SYSDATE, 1), 'MM')
-- 本季剩餘天數
TRUNC(ADD_MONTHS(SYSDATE, 3), 'Q') - TRUNC(SYSDATE, 'Q')
-- 判斷是否月初
CASE WHEN TRUNC(SYSDATE, 'MM') = TRUNC(SYSDATE) THEN 1 ELSE 0 END
TRUNC vs ROUND
TRUNC:向下截取 (Floor)。
ROUND:四捨五入 (最近)。
例:ROUND(SYSDATE, 'MM') 若日期 ≥ 16 號則返回下月 1 號。
注意事項
- 無秒精度:
TRUNC 不支援 SS,需用 TO_CHAR/TO_DATE 組合。
- 時區敏感:
SYSDATE 取服務器時間,SYSTIMESTAMP 含時區。
- 索引失效風險:
WHERE TRUNC(col) = ... 會導致普通索引失效,建議改用 col >= TRUNC(SYSDATE) AND col < TRUNC(SYSDATE)+1 或建立函數索引。