報表常需將數值格式化為固定兩位小數(如 1234.50、0.00),單純 ROUND(val,2) 會省略尾隨零,顯示不整齊。以下四種方案由簡到精,附優缺點對比。
| 方案 | 語法範例 | 優點 | 缺點 |
|---|---|---|---|
| 1. TO_CHAR + FM | TO_CHAR(ROUND(val,2), 'FM99999999999999.00') |
格式化能力強 | 0 顯示為 .00 需額外 DECODE 處理;9 的位數不足顯示 # |
| 2. CASE WHEN 邏輯判斷 | 手動檢查小數點位置補零 | 完全可控 | 程式碼冗長、效能較差 |
| 3. COLUMN FORMAT (SQL*Plus) | COLUMN amount FORMAT 9999999999.99 |
互動式查詢最快 | 僅限 SQL*Plus Session,不適用應用程式 |
| 4. TRIM + TO_CHAR (推薦) | TRIM(TO_CHAR(val, '99999999999999.99')) |
通用、簡潔、自動去前導空白 | 0 仍顯示 .00 需 DECODE;格式位數需足夠 |
SELECT DECODE(salary, 0, '0.00',
TRIM(TO_CHAR(salary, '99999999999999.99')))
FROM employees;
或使用 FM 格式:
SELECT DECODE(salary, 0, '0.00',
TO_CHAR(ROUND(salary,2), 'FM99999999999999.00'))
FROM employees;
########。TRIM 只去除前導/尾隨空白,不影響數字本身。'999G999G999D99' (NLS 相關)。格式化屬表達式計算,建議僅在最終輸出層(View/Report)執行,避免中間結果集重複轉換;大量資料可考慮在應用層格式化減輕資料庫 CPU。
掌握 TRIM(TO_CHAR(...)) + DECODE(0) 組合,滿足 95% 報表格式化需求。