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

Oracle TO_CHAR 數值格式化:精確控制小數位、千分位與貨幣符號

     編輯:Oracle 資料庫基礎

TO_CHAR(number, fmt, nlsparam) 是 Oracle 將數值轉為格式化字串的核心函式。本文深入解析格式模型元素、FM 修飾詞行為、NLS 參數覆蓋機制,並針對「小數位不足補零」、「整數不顯示小數點」、「負號/括號表示」等實戰需求提供標準寫法。

格式模型元素完整對照

元素功能範例結果
9數字位(前導空白)TO_CHAR(123, '9999')' 123'
0數字位(前導零)TO_CHAR(123, '0000')'0123'
.小數點位置TO_CHAR(1.2, '9.99')'1.20'
,千分位分隔(僅左側)TO_CHAR(1234, '9,999')'1,234'
$美元符號(固定 $)TO_CHAR(123, '$999')'$123'
L本地貨幣符號(依 NLS)TO_CHAR(123, 'L999')'NT$123' (繁中環境)
MI負號後置TO_CHAR(-123, '999MI')'123-'
PR負數用括號TO_CHAR(-123, '999PR')'<123>'
FM移除前導/尾隨空白與零TO_CHAR(1.2, 'FM9.99')'1.2'
B零值顯示空白TO_CHAR(0, 'B999')' '

實戰常見需求與標準寫法

需求 1:固定 3 位小數,不足補零


SELECT TO_CHAR(0.123, '0.000') FROM dual;   -- '0.123'
SELECT TO_CHAR(1.1,   '0.000') FROM dual;   -- '1.100'
SELECT TO_CHAR(100,   '0.000') FROM dual;   -- '100.000'

需求 2:移除多餘空白與尾隨零,但保留小數點(整數不顯示小數點)

FM 會殘留小數點,需搭配 RTRIM:


SELECT RTRIM(TO_CHAR(val, 'FM999.999'), '.') FROM dual;
-- val=1.2    → '1.2'
-- val=100    → '100'   (無小數點)
-- val=100.00 → '100'

需求 3:千分位 + 本地貨幣 + 負數括號


SELECT TO_CHAR(-12345.67, 'FM L999,999.99PR') FROM dual;
-- 結果:'NT$<12,345.67>'  (繁中環境 NLS_CURRENCY=NT$)

需求 4:自訂小數點與千分位字元(覆蓋 NLS)


-- 欧洲格式:小數點用逗號,千分位用點
SELECT TO_CHAR(12345.67, '99G999D99',
               'NLS_NUMERIC_CHARACTERS='',.''') FROM dual;
-- 結果:'12.345,67'

NLS 參數覆蓋優先序

  1. 函式第三參數 nlsparam(最高)
  2. Session 層級 ALTER SESSION SET NLS_NUMERIC_CHARACTERS=...
  3. 資料庫層級 NLS_NUMERIC_CHARACTERS
  4. 預設值(美式 .,)

避坑提醒

  • FM 與 0 衝突: FM0.999 仍會輸出前導零,FM 僅移除空白與尾隨零。
  • 負數格式: MI/PR 僅影響負數,正數不會加正號;若需正負號皆顯示,用 S 元素(S999 → +123/-123)。
  • 科學記號: EEEE 僅適用於極大/極小數值,一般報表勿用。

掌握 TO_CHAR 格式模型組合技巧,即可輸出符合財務、報表、介面各種嚴格格式需求的字串。

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