首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 時間處理大全:INTERVAL 類型、高精度時間戳、日期轉換與業務計算

     編輯:Oracle 資料庫相關知識

一、為什麼需要 INTERVAL 類型

傳統 NUMBER(秒) 或 DATE 差值計算困難(60 進制、月長短不一)。Oracle 9i+ 引入 SQL:1999 標準:

  • INTERVAL YEAR TO MONTH:年月間隔;
  • INTERVAL DAY TO SECOND:天/時/分/秒/分秒間隔,支援小數秒精度。

二、高精度時間戳類型

三、常用轉換函數

-- 字符串 → DATE
TO_DATE('2008-11-27', 'YYYY-MM-DD')
TO_DATE('2008-11-27 13:34:43', 'YYYY-MM-DD HH24:MI:SS')

-- 字符串 → TIMESTAMP
TO_TIMESTAMP('2008-11-27 13:34:43.123456', 'YYYY-MM-DD HH24:MI:SS.FF6')

-- DATE/TIMESTAMP → 字符串
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
TO_CHAR(CURRENT_TIMESTAMP(5), 'DD-MON-YYYY HH24:MI:SS.FF')

四、INTERVAL 字面量語法

INTERVAL '1-6' YEAR TO MONTH        -- 1 年 6 月
INTERVAL '10 12:30:45.123' DAY TO SECOND  -- 10 天 12 時 30 分 45.123 秒

五、實用業務計算速查表

類型精度時區支援
TIMESTAMP分秒(默認 6 位微秒)無
TIMESTAMP WITH TIME ZONE分秒 + 時區偏移有(存儲時區)
TIMESTAMP WITH LOCAL TIME ZONE分秒 + 會話時區自動轉換有(正規化存儲)
需求SQL
系統時間 + 5 秒SYSDATE + INTERVAL '5' SECOND
系統時間 + 5 分鐘SYSDATE + INTERVAL '5' MINUTE
系統時間 + 5 小時SYSDATE + INTERVAL '5' HOUR
系統時間 + 5 天SYSDATE + 5
系統時間 - 5 月ADD_MONTHS(SYSDATE, -5)
系統時間 - 5 年ADD_MONTHS(SYSDATE, -60)
上月末日期LAST_DAY(ADD_MONTHS(SYSDATE, -1))
本月最後一秒TRUNC(ADD_MONTHS(SYSDATE,1),'MM') - INTERVAL '1' SECOND
本周一日期TRUNC(SYSDATE,'DAY') + 1
年初至今天數CEIL(SYSDATE - TRUNC(SYSDATE,'YEAR'))
今年第幾周TO_CHAR(SYSDATE,'IW')
本月第幾周TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1
本月天數TO_CHAR(LAST_DAY(SYSDATE),'DD')
今年天數ADD_MONTHS(TRUNC(SYSDATE,'YEAR'),12) - TRUNC(SYSDATE,'YEAR')
下周一日期NEXT_DAY(SYSDATE,'MONDAY')

六、業務時間窗口判斷範例

-- 記錄最大時間 + 14 月 > 當前時間 → 有效(1),否則無效(0)
SELECT CASE WHEN CURRENT_DATE < 
  (SELECT ADD_MONTHS(MAX(med_time), 14) FROM red_meetting_record 
   WHERE med_tar_id='225' AND med_usr_id='001387')
THEN 1 ELSE 0 END AS contains FROM DUAL;

七、性能建議

  • 避免在 WHERE 條件中對列使用函數(TO_CHAR(created,'YYYYMMDD') = '20240101'),改用範圍查詢(created >= DATE '2024-01-01' AND created < DATE '2024-01-02');
  • 分區表按時間列分區時,確保分區鍵類型與查詢條件類型一致,觸發分區裁剪;
  • 大量時間計算考慮使用 INTERVAL 字面量而非數字除法,可讀性與精度雙贏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved