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

Oracle EXTRACT 函數完全指南:日期時間元件擷取的正確姿勢

     編輯:Oracle 資料庫相關知識

EXTRACT 函數用於從日期時間值中擷取特定元件(年、月、日、時、分、秒等),但其引數類型有嚴格限制,常見錯誤源於對 DATE 與 TIMESTAMP 差異的誤解。

基本用法與範例

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;      -- 可行,回傳年份
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;     -- 可行,回傳月份
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;       -- 可行,回傳日期
SELECT EXTRACT(HOUR FROM SYSDATE) FROM DUAL;      -- 報錯!SYSDATE 是 DATE 型別
SELECT EXTRACT(HOUR FROM TIMESTAMP '2005-10-10 10:10:10') FROM DUAL; -- 正確
SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL;    -- 報錯
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2005-10-10 10:10:10') FROM DUAL; -- 正確

核心規則

  • DATE 型別(如 SYSDATE、資料表的 DATE 欄位)僅支援擷取 YEAR、MONTH、DAY。
  • TIMESTAMP 型別(含 TIMESTAMP WITH TIME ZONE)才支援擷取 HOUR、MINUTE、SECOND、TIMEZONE_HOUR 等時間元件。
  • 引數必須是 字面常數 或 TIMESTAMP 型別欄位/運算式,不能 將 DATE 型別透過 TO_CHAR/TO_DATE 轉字串後再包在 TIMESTAMP '...' 中,仍會報錯。

正確的替代方案

若需從 DATE 型別欄位取得時分秒,請直接使用 TO_CHAR:

SELECT TO_CHAR(date_col, 'HH24:MI:SS') FROM table_name;
SELECT TO_CHAR(date_col, 'HH24') || ':' || TO_CHAR(date_col, 'MI') FROM table_name;

總結:EXTRACT 嚴格區分資料型別,DATE 只能取年月日,TIMESTAMP 才能取時分秒;切勿嘗試用字串轉換繞過型別檢查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved