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

Oracle 日期函數基礎:內部儲存、顯示格式與常用運算

     編輯:Oracle 資料庫相關知識

Oracle 以數值內部儲存日期 (世紀、年、月、日、時、分、秒),預設顯示格式為 DD-MON-RR。理解內部表示與格式模型,是處理日期資料的基礎。本文整理核心觀念與實用範例。

一、核心觀念

  • 日期資料型態固定佔用 7 位元組:世紀、年、月、日、時、分、秒。
  • RR 格式允許輸入兩位數年份,自動推斷世紀 (1950-2049 規則)。
  • SYSDATE 回傳資料庫伺服器當前日期時間。

二、常用日期運算

運算語法結果型態範例
日期 - 日期date1 - date2數值 (天數,含小數)SYSDATE - HIRE_DATE
日期 + 數值date + n日期SYSDATE + 7 (一週後)
日期 - 數值date - n日期SYSDATE - 30 (30天前)
日期 + 間隔date + INTERVAL 'n' DAY日期ANSI 標準寫法

三、實用查詢範例

1. 日期比較 (隱含轉換)

SELECT last_name, hire_date
FROM employees
WHERE hire_date < '01-FEB-88';  -- 字串依 NLS_DATE_FORMAT 隱含轉換

建議:明確使用 TO_DATE 或 DATE '1988-02-01' (ANSI 字面值) 避免格式歧義。

2. 計算任職週數

SELECT last_name, (SYSDATE - hire_date) / 7 AS weeks
FROM employees
WHERE department_id = 90;

結果為數值,含小數 (如 123.4 週)。若需整數可用 TRUNC 或 FLOOR。

四、常用日期函數速查

函數用途範例
SYSDATE目前日期時間SELECT SYSDATE FROM DUAL;
ADD_MONTHS(d, n)加減月份ADD_MONTHS(SYSDATE, 3)
MONTHS_BETWEEN(d1, d2)兩日期月差MONTHS_BETWEEN(SYSDATE, hire_date)
LAST_DAY(d)該月最後一天LAST_DAY(SYSDATE)
NEXT_DAY(d, 'DAY')下一個指定週幾NEXT_DAY(SYSDATE, 'FRIDAY')
TRUNC(d, 'fmt')截斷到指定單位TRUNC(SYSDATE, 'MM') 月初
ROUND(d, 'fmt')四捨五入到單位ROUND(SYSDATE, 'YYYY') 年中
TO_CHAR(d, 'fmt')日期轉字串TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(s, 'fmt')字串轉日期TO_DATE('2024-01-15', 'YYYY-MM-DD')
EXTRACT(YEAR/MONTH/DAY FROM d)擷取元件 (ANSI)EXTRACT(MONTH FROM SYSDATE)

五、格式模型常用元素

YYYY  四位數年    MM  月(01-12)    MON  月縮寫(JAN-DEC)
DD    日(01-31)    DY  週幾縮寫    DAY  週幾全名
HH24  24制時       MI  分          SS  秒
AM/PM 上午/下午標識

六、最佳實踐建議

  1. WHERE 條件比較日期時,勿依賴隱含轉換,統一用 TO_DATE 或 ANSI DATE 'YYYY-MM-DD'。
  2. 應用程式傳遞日期參數時,使用 Bind Variable (日期型別),避免字串轉換錯誤與 SQL 注入。
  3. 跨時區系統請改用 TIMESTAMP WITH TIME ZONE 或 TIMESTAMP WITH LOCAL TIME ZONE。
  4. 大量資料篩選日期範圍時,善用分區表分區修剪。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved