TRUNC 依指定格式截斷日期或數值,不進行四捨五入,直接捨棄超出精度部分。分為 TRUNC(date) 與 TRUNC(number) 兩大用法。
TRUNC(date [, fmt])
date:日期值fmt:格式模型,指定截斷精度;省略則截至當日午夜 (00:00:00)| fmt 值 | 截斷精度 | 說明 |
|---|---|---|
| YYYY / YEAR | 年 | 該年 1 月 1 日 00:00:00 |
| MM / MONTH | 月 | 該月 1 日 00:00:00 |
| DD / DAY | 日 | 該日 00:00:00(預設) |
| HH / HH24 | 時 | 該時 0 分 0 秒 |
| MI | 分 | 該分 0 秒 |
-- 預設截至當日午夜
TRUNC(TO_DATE('24-Nov-1999 08:00 PM', 'DD-MON-YYYY HH:MI AM'))
= '24-Nov-1999 00:00:00'
-- 截至小時
TRUNC(TO_DATE('24-Nov-1999 08:37 PM', 'DD-MON-YYYY HH:MI AM'), 'HH')
= '24-Nov-1999 08:00:00'
ROUND(date):時間在中午前 → 截至當日午夜;中午後 → 進位至翌日午夜TRUNC(date):無條件截至當日午夜,不考慮時間早晚TRUNC(number [, decimals])
number:待處理數值decimals:保留小數位數;省略 → 截去所有小數(同取整數部);可為負數
TRUNC(89.985, 2) = 89.98 -- 保留 2 位小數
TRUNC(89.985) = 89 -- 截去所有小數
TRUNC(89.985, -1) = 80 -- 負數:小數點左側第 1 位後歸零
TRUNC(123.456, -2) = 100 -- 百位後歸零
TRUNC(date_col, 'MM') 統一分組鍵TRUNC(created_date, 'MM') 作為月度分區依據TRUNC 會阻礙索引使用(函數索引除外)CREATE INDEX idx_trunc_dt ON t(TRUNC(dt, 'MM'))dt >= TRUNC(SYSDATE, 'MM') AND dt < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1)