兩大用法概覽
| 模式 | 語法 | 用途 |
| 日期 | TRUNC(date [, fmt]) | 將日期按指定單位截斷(歸零較小單位) |
| 數值 | TRUNC(number [, decimals]) | 直接捨去指定小數位之後的數字(不四捨五入) |
日期模式
常用格式模板
| fmt | 截斷單位 | 範例(輸入 2024-01-15 14:30:59) |
| YYYY / YEAR | 年 | 2024-01-01 00:00:00 |
| MM / MONTH | 月 | 2024-01-01 00:00:00 |
| DD / DAY / J | 日 | 2024-01-15 00:00:00 |
| HH / HH24 | 時 | 2024-01-15 14:00:00 |
| MI | 分 | 2024-01-15 14:30:00 |
| (省略) | 日 | 2024-01-15 00:00:00 |
範例
TRUNC(TO_DATE('24-Nov-1999 20:37', 'dd-mon-yyyy hh24:mi')) --> 1999-11-24 00:00:00
TRUNC(TO_DATE('24-Nov-1999 20:37', 'dd-mon-yyyy hh24:mi'), 'HH') --> 1999-11-24 20:00:00
TRUNC vs ROUND (日期)
TRUNC:無條件向下截斷(歸零)。
ROUND:四捨五入。例如時間 ≥ 12:00 進位到隔天 00:00。
數值模式
語法
TRUNC(number [, decimals])
decimals > 0:保留小數點右邊 decimals 位,後續直接捨去。
decimals = 0 或省略:捨去所有小數,回傳整數。
decimals < 0:從小數點左邊第 |decimals| 位開始歸零(十位、百位...)。
範例
TRUNC(89.985, 2) --> 89.98
TRUNC(89.985) --> 89
TRUNC(89.985, -1) --> 80
TRUNC(1234.56, -2) --> 1200
實務應用場景
- 日期分組統計:
GROUP BY TRUNC(order_date, 'MM') 按月彙總。
- 金額精度控制:會計系統常用
TRUNC(amount, 2) 強制捨去千分位以下,避免四捨五入累積誤差。
- 分頁查詢邊界:
TRUNC(rownum/20) 計算頁碼(舊寫法)。
效能提示
- 對欄位使用
TRUNC 會導致索引失效,若頻繁查詢 WHERE TRUNC(dt) = ...,建議建立函數索引 CREATE INDEX idx_dt_trunc ON tbl(TRUNC(dt))。
- 數值
TRUNC 比 ROUND 略快(無四捨五入邏輯),高頻呼叫時可考慮。