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

Oracle TRUNC 函數完整指南:日期與數值截取技巧

     編輯:Oracle 資料庫基礎

一、TRUNC 日期函數:精準截取時間元素

在 Oracle 資料庫中,TRUNC(date[, fmt]) 函數能依指定格式截斷日期值,保留所需的時間粒度。若省略 fmt 參數,預設會截去時間部分,僅保留日期(即午夜 00:00:00)。

常用格式模型與範例

格式模型說明範例輸入結果
YYYY / YEAR年度第一天(1 月 1 日)TRUNC(SYSDATE, 'YYYY')2024-01-01 00:00:00
MM / MONTH月份第一天TRUNC(SYSDATE, 'MM')2024-03-01 00:00:00
D / DAY本週第一天(週日)TRUNC(SYSDATE, 'D')2024-03-10 00:00:00
DD當天日期(去除時間)TRUNC(SYSDATE, 'DD')2024-03-15 00:00:00
HH / HH24整點小時TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'), 'HH')1999-11-24 20:00:00
MI整分TRUNC(TO_DATE('24-Nov-1999 08:37:45 pm','dd-mon-yyyy hh:mi:ss am'), 'MI')1999-11-24 20:37:00

實務技巧: 結合 SYSDATE 可快速取得「本月首日」、「本年度首日」等邊界值,常用於報表篩選或分區裁剪。

二、TRUNC 數值函數:直接捨去而非四捨五入

TRUNC(number[, decimals]) 會直接截斷數值,不做任何四捨五入。decimals 為正時保留小數位;為負時向左截斷至十位、百位等;省略則截去所有小數。

運作示例

TRUNC(89.985, 2)   = 89.98   -- 保留兩位小數
TRUNC(89.985)      = 89      -- 截去所有小數
TRUNC(89.985, -1)  = 80      -- 截至十位(個位歸零)
TRUNC(1234.56, -2) = 1200    -- 截至百位

關鍵差異: ROUND(89.985, 2) = 89.99(四捨五入),而 TRUNC 永遠只是「切掉」多餘位數,適合需嚴格截斷的財務或統計計算。

三、總結與最佳實踐

  • 日期截取:善用格式模型(YYYY, MM, D, HH, MI)快速對齊時間邊界。
  • 數值截取:記住 decimals 可為負數,方便處理「捨去尾數」需求。
  • 效能:TRUNC 為內建單行函數,執行效率極高,可放心用於大量資料的 WHERE 條件或 SELECT 列表中。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved