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

Oracle 資料型態轉換函式 TO_CHAR、TO_DATE、TO_NUMBER 完整實戰手冊

     編輯:Oracle 資料庫基礎

Oracle 提供顯式轉換函式 TO_CHAR、TO_DATE、TO_NUMBER 讓開發者精確控制型態轉換,避免隱含轉換帶來的效能與正確性風險。本文系統整理語法、格式模型、常用範例與進階技巧。

核心函式語法速查

函式用途語法關鍵提醒
TO_CHAR數值/日期 → 字串TO_CHAR(expr, fmt, nlsparam)fmt 必須單引號包裹、區分大小寫
TO_DATE字串 → 日期TO_DATE(char, fmt, nlsparam)fmt 需與輸入字串完全對應
TO_NUMBER字串 → 數值TO_NUMBER(char, fmt, nlsparam)fmt 可指定千分位、貨幣符號

日期格式模型精選(TO_CHAR/TO_DATE 通用)

-- 年月日時分秒
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')   -- 2024-01-15 14:30:45
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH12:MI:SS AM') -- 2024-01-15 02:30:45 PM

-- 進階格式
TO_CHAR(SYSDATE, 'DD "of" MONTH')           -- 15 of JANUARY
TO_CHAR(SYSDATE, 'YYYY "Year" Q "Quarter"') -- 2024 Year 1 Quarter
TO_CHAR(SYSDATE, 'IW')                      -- ISO 週數 (1-53)
TO_CHAR(SYSDATE, 'CC')                      -- 世紀 (21)

數值格式模型精選


TO_CHAR(12345.67, '999,999.99')      --  12,345.67
TO_CHAR(12345.67, '000,000.00')      -- 012,345.67 (前導零)
TO_CHAR(-12345.67, '999,999.99MI')   --  12,345.67- (負號後置)
TO_CHAR(-12345.67, '999,999.99PR')   -- <12,345.67> (括號表示負)
TO_CHAR(12345.67, 'L999,999.99')     -- $12,345.67 (本地貨幣符號)
TO_CHAR(0.123, '0.999')              -- 0.123 (強制顯示小數點前 0)
TO_CHAR(100.12, 'FM999.999')         -- 100.12 (FM 移除前導/尾隨空白)

實戰常見場景與範例

場景 1:報表欄位格式化

SELECT employee_id,
       TO_CHAR(hire_date, 'YYYY-MM') AS hire_ym,
       TO_CHAR(salary, 'L999,999.99') AS salary_fmt
FROM employees
WHERE last_name = 'Higgins';

場景 2:跨系統資料匯入清洗

-- 來源字串 '20240115143045' 轉 DATE
TO_DATE(substr(src_col,1,14), 'YYYYMMDDHH24MISS')

-- 來源金額字串 '1,234.56' 轉 NUMBER
TO_NUMBER(src_amt, '999,999.99', 'NLS_NUMERIC_CHARACTERS=''.,''')

場景 3:動態格式化(PL/SQL)


CREATE OR REPLACE FUNCTION fmt_amount(p_amt NUMBER, p_fmt VARCHAR2) RETURN VARCHAR2 IS
BEGIN
  RETURN TO_CHAR(p_amt, p_fmt);
EXCEPTION
  WHEN OTHERS THEN RETURN TO_CHAR(p_amt); -- 失敗回退預設
END;

避坑指南

  • FM 修飾詞: FM 移除前導空白與尾隨零,但整數值仍會保留小數點(如 TO_CHAR(100, 'FM999.99') → '100.'),需自行 RTRIM(..., '.') 處理。
  • ROUND 與 TRUNC 差異: TO_CHAR(1.999, '9.99') → '2.00'(四捨五入),若需截斷請先 TRUNC(val, 2) 再格式化。
  • NLS 參數優先序: 函式指定 nlsparam > Session NLS_* > Database NLS_* > 預設值。

熟練掌握三大轉換函式與格式模型,能讓 SQL 更精準、報表更美觀、跨系統整合更穩健。

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