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

Oracle 字串轉 TIMESTAMP 與 DATE 型態完整操作指南

     編輯:Oracle 資料庫基礎

Oracle 提供 TO_TIMESTAMP、TO_TIMESTAMP_TZ、TO_DATE 將字串轉為時間型態,並以 TO_CHAR 反向輸出。本文整理轉換語法、時區處理、TIMESTAMP 運算特性、精度轉換陷阱與實戰範例。

核心轉換函式語法

函式用途語法適用場景
TO_DATE字串 → DATE(秒精度)TO_DATE(str, fmt)一般業務日期,不需時區/小數秒
TO_TIMESTAMP字串 → TIMESTAMP(奈秒精度)TO_TIMESTAMP(str, fmt)高精度時間戳記,無時區資訊
TO_TIMESTAMP_TZ字串 → TIMESTAMP WITH TIME ZONETO_TIMESTAMP_TZ(str, fmt)跨時區系統,保留時差資訊
TO_CHAR日期/時間 → 字串TO_CHAR(dt, fmt)報表輸出、介面顯示

格式模型關鍵差異


-- DATE / TIMESTAMP 共用
YYYY-MM-DD HH24:MI:SS

-- TIMESTAMP 專屬:小數秒
FF / FF1 .. FF9   -- 1~9 位小數秒,對應 TIMESTAMP(1~9)

-- TIMESTAMP WITH TIME ZONE 專屬:時區
TZH:TZM           -- 時區時:分 (如 +08:00)
TZR               -- 時區名稱 (如 Asia/Taipei)

實戰範例

1. 基本轉換與更新


-- 字串轉 TIMESTAMP(6) 並更新
UPDATE t_fl_flownote
SET sendtime = TO_TIMESTAMP('2009-11-30 10:47:16', 'YYYY-MM-DD HH24:MI:SS');

-- 帶時區字串轉換
SELECT TO_TIMESTAMP_TZ('2009-03-09 17:51:23.23 +08:00', 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
FROM dual;

2. TIMESTAMP 減法運算特性

兩個 TIMESTAMP 相減回傳 INTERVAL DAY TO SECOND 型態,直接顯示「天 時:分:秒.小數秒」:


CREATE TABLE test (t1 TIMESTAMP(6), t2 TIMESTAMP(6));
INSERT INTO test VALUES (
  TO_TIMESTAMP('2006-01-01 12:10:10.1', 'YYYY-MM-DD HH24:MI:SS.FF'),
  TO_TIMESTAMP('2006-01-01 12:20:10.2', 'YYYY-MM-DD HH24:MI:SS.FF')
);
SELECT t2 - t1 FROM test;
-- 結果:+000000000 00:10:00.100000  (0天 0時10分0.1秒)

3. 精度轉換陷阱:欲轉「總分鐘數」卻得到錯誤結果


-- 錯誤嘗試:直接乘 1440 (24*60)
SELECT 1440 * (t2 - t1) FROM test;
-- 結果:+000000010 00:02:24.000000  (錯誤!每個欄位獨立乘 1440 後再進位)

-- 正確做法:先轉為單一單位
SELECT EXTRACT(DAY FROM diff) * 1440 +
       EXTRACT(HOUR FROM diff) * 60 +
       EXTRACT(MINUTE FROM diff) +
       EXTRACT(SECOND FROM diff) / 60 AS total_minutes
FROM (SELECT t2 - t1 AS diff FROM test);

DATE vs TIMESTAMP 選型建議

  • DATE: 相容性佳、運算簡單(date1 - date2 直接得天數)、儲存 7 Bytes。
  • TIMESTAMP(n): 需要小數秒精度、或未來可能遷移至時區感知系統,儲存 7~11 Bytes。
  • TIMESTAMP WITH TIME ZONE: 全球化應用、跨區域資料同步,儲存 13 Bytes。

避坑提醒

  • TO_TIMESTAMP 格式模型中 FF 位數必須與目標欄位精度一致(如 TIMESTAMP(3) 用 FF3),否則四捨五入或截斷。
  • Session 參數 NLS_TIMESTAMP_FORMAT、NLS_TIMESTAMP_TZ_FORMAT 會影響隱含轉換,建議永遠顯式指定格式。
  • INTERVAL 型態無法直接乘數值,需用 EXTRACT 拆解後運算。

精準掌握字串↔時間型態轉換與運算規則,是處理審計日誌、金融交易、物聯網感測器資料的基本功。

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