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

Oracle TRUNC 函數雙模式詳解:日期截斷與數值截取

     編輯:Oracle 資料庫基礎

兩大用法概覽

模式語法用途
日期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 略快(無四捨五入邏輯),高頻呼叫時可考慮。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved