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

MySQL FORMAT() 函數:數字千分位格式化輸出

     編輯:MySQL 綜合教學

函數用法

FORMAT(number, decimal_places [, locale])
  • number:要格式化的數字
  • decimal_places:小數位數 (四捨五入)
  • locale (可選):地區設定,影響千分位分隔符與小數點符號,預設 en_US

基本範例

SELECT FORMAT(123456789, 0);        -- 123,456,789
SELECT FORMAT(1234567.89, 2);       -- 1,234,567.89
SELECT FORMAT(1234567.891, 2);      -- 1,234,567.89 (四捨五入)
SELECT FORMAT(1234567.89, 2, 'de_DE'); -- 1.234.567,89 (德語地區:點分千位、逗號小數點)

實戰場景

1. 報表金額顯示

SELECT 
  order_id,
  FORMAT(total_amount, 2) AS amount_formatted,
  FORMAT(tax_amount, 2) AS tax_formatted
FROM orders
WHERE created_at >= '2024-01-01';

2. 統計數字可讀性

SELECT 
  'Total Users' AS metric,
  FORMAT(COUNT(*), 0) AS value
FROM users
UNION ALL
SELECT 
  'Total Orders',
  FORMAT(COUNT(*), 0)
FROM orders;

3. 多地區化報表

-- 系統根據用戶語言動態選擇 locale
SELECT 
  FORMAT(price, 2, 
    CASE user_lang 
      WHEN 'zh_CN' THEN 'zh_CN'
      WHEN 'en_US' THEN 'en_US'
      WHEN 'de_DE' THEN 'de_DE'
      ELSE 'en_US'
    END
  ) AS price_display
FROM products;

注意事項

項目說明
返回類型CHAR/VARCHAR (字串),非數值類型,不可直接參與數學運算
NULL 處理FORMAT(NULL, 2) 返回 NULL
負數保留負號:FORMAT(-1234.5, 1) → -1,234.5
大數字支援超大整數,但超過 DOUBLE 精度範圍可能失真
效能字串格式化較慢,大量列建議應用層處理或僅在最終 SELECT 使用

替代方案:應用層格式化

-- Python
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
formatted = locale.format_string('%,.2f', 1234567.89)  # '1,234,567.89'

-- Java
NumberFormat.getNumberInstance(Locale.US).format(1234567.89)

-- JavaScript
(1234567.89).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})

總結

  • FORMAT(N, D):快速產生千分位字串,適合報表、日誌、少量查詢
  • 返回**字串**,後續計算需先 CAST(... AS DECIMAL)
  • 高頻/大量資料場景建議**應用層格式化**,減輕資料庫 CPU
  • 支援 locale 參數實現國際化顯示
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved