首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle TRUNC 函數完全指南:日期截斷與數值截斷語法、範例與實戰差異對比

     編輯:Oracle 資料庫基礎

函數總覽

TRUNC 依指定格式截斷日期或數值,不進行四捨五入,直接捨棄超出精度部分。分為 TRUNC(date) 與 TRUNC(number) 兩大用法。

一、TRUNC(date) — 日期截斷

語法

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 差異關鍵

  • ROUND(date):時間在中午前 → 截至當日午夜;中午後 → 進位至翌日午夜
  • TRUNC(date):無條件截至當日午夜,不考慮時間早晚

二、TRUNC(number) — 數值截斷

語法

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)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved