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

Oracle 資料型別轉換函數:TO_CHAR 與 TO_DATE 完全指南

     編輯:Oracle 資料庫基礎

TO_CHAR:數值/日期 → 字串

日期格式化

TO_CHAR(date, fmt)
常用格式輸出範例
YYYY-MM-DD HH24:MI:SS2024-01-15 14:30:59
YYYY"年"MM"月"DD"日"2024年01月15日
HH24:MI:SS14:30:59
YYYY-DDD2024-015(年間第幾天)
YYYY-MM IW-D2024-01 03-1(ISO 週/週幾)

數值格式化

TO_CHAR(number, fmt)
格式輸入輸出說明
99,999.99995764.12345 5,764.12359=數字位,前導空白
09,999.99995764.1234505,764.12350=前導零
FM9999999.0099123.0233123.0233FM去空白,00至少2位,99最多4位

TO_DATE:字串 → 日期

TO_DATE(string, fmt)
輸入字串fmt結果
'2024-01-15 14:30:59''YYYY-MM-DD HH24:MI:SS'2024-01-15 14:30:59
'2024-01-15''YYYY-MM-DD'2024-01-15 00:00:00

插入範例

INSERT INTO item_test (item_id, item_desc, created_dt)
VALUES ('ITEM-001', 'Sample',
        TO_DATE('2024-01-25', 'YYYY-MM-DD'));

常見錯誤與避坑

  1. HH vs HH24:HH 為 12 小時制(1-12),HH24 為 24 小時制(0-23)。
  2. MI vs MM:MI = 分鐘,MM = 月份。
    TO_DATE('14:30', 'HH24:MM') 會報錯或產生錯誤結果(月份重複)。
  3. NLS 相依性:若格式模板與 Session NLS_DATE_FORMAT、NLS_LANGUAGE 不符,可能報錯。建議在 SQL 中明確指定 fmt。
  4. 隱含轉換:WHERE dt = '2024-01-15' 依賴隱含 TO_DATE,效能差且易出錯 → 改用 DATE '2024-01-15' 或 TO_DATE(..., fmt)。

進階:時間間隔運算(10g+)

-- 當前時間減 7 分鐘
SELECT SYSDATE - INTERVAL '7' MINUTE FROM dual;

-- 當前時間減 7 小時
SELECT SYSDATE - INTERVAL '7' HOUR FROM dual;

-- 當前時間減 7 天
SELECT SYSDATE - INTERVAL '7' DAY FROM dual;

-- 間隔乘以純量
SELECT SYSDATE - 8 * INTERVAL '2' HOUR FROM dual;

毫秒級支援

-- 含毫秒的目前時間
SELECT TO_CHAR(CURRENT_TIMESTAMP(5), 'DD-MON-YYYY HH24:MI:SS.FF') FROM dual;

-- 只取分秒毫秒
SELECT TO_CHAR(CURRENT_TIMESTAMP(9), 'MI:SS.FF') FROM dual;

程式執行耗時測量(毫秒)

DECLARE
  l_start NUMBER := DBMS_UTILITY.GET_TIME; -- 百分之一秒
  l_dummy all_objects.object_name%TYPE;
  l_rc    SYS_REFCURSOR;
BEGIN
  FOR i IN 1..1000 LOOP
    OPEN l_rc FOR 'SELECT object_name FROM all_objects WHERE object_id = ' || i;
    FETCH l_rc INTO l_dummy;
    CLOSE l_rc;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(ROUND((DBMS_UTILITY.GET_TIME - l_start)/100, 2) || ' seconds');
END;
/
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved