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

Oracle NUMBER 轉 CHAR 遺失前導零問題與格式化解決方案

     編輯:Oracle 教學

Oracle NUMBER 轉 CHAR 遺失前導零問題與格式化解決方案

Oracle TO_CHAR(number) 預設不保留整數部為 0 的前導零(如 0.1 → '.1'),導致前端顯示或介接系統解析異常。本文說明現象、標準格式模型解決方案,與利用 REPLACE 兼容整數/小數混雜場景的實用技巧。

一、現象重現

SELECT TO_CHAR(0.1) nums FROM dual;   -- 顯示 .1 (遺失前導 0)
SELECT TO_CHAR(1) nums FROM dual;     -- 顯示 1 (整數變科學標記風格)

二、標準解決:格式模型 (Format Model)

SELECT TO_CHAR(0.1, '0.9') nums FROM dual;   -- 顯示 0.1
SELECT TO_CHAR(1, '0.9') nums FROM dual;     -- 顯示 1.0 (含小數點)
  • 0:強制顯示數字,不足補 0。
  • 9:顯示數字,不足留空白。
  • FM:移除前後空白(FM0.9)。

三、常用格式模板

四、混合整數/小數欄位的通用處理技巧

若欄位可能為整數或小數,且需「整數不顯示小數點、小數保留兩位」,可結合 REPLACE:

SELECT unitname,
       hurk, ldrk,
       REPLACE(TO_CHAR(ROUND(hurk/ldrk,2), 'FM999999990.00'), '.00', '') AS scale,
       rdate
FROM dynamicpeople;
  1. ROUND(...,2) 先四捨五入兩位。
  2. TO_CHAR(...,'FM999999990.00') 強制產生兩位小數 (如 1.50、2.00)。
  3. REPLACE(... , '.00', '') 移除整數尾部的 .00,得到 1.5、2。

五、效能與相容性提醒

  • TO_CHAR 為 CPU 密集操作,大量資料建議在應用層格式化或使用虛擬欄位 GENERATED ALWAYS AS (TO_CHAR(...)) VIRTUAL。
  • NLS 參數 (NLS_NUMERIC_CHARACTERS) 影響小數點/千分位字元,跨環境部署請顯式指定格式模型,勿依賴預設值。

掌握格式模型與 REPLACE 組合技,即可彈性處理各類數值顯示需求,避免前導零遺失與多餘小數點干擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
需求格式字串範例輸入輸出
固定 2 位小數FM999999990.00123.4123.40
千分位分隔 + 2 位小數FM999,999,990.0012345.612,345.60
科學記號9.99EEEE12341.23E+03
貨幣符號L999,999.001234.5NT$1,234.50 (視 NLS_CURRENCY)