Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chuyển đổi số nguyên sang định dạng tiền tệ trong MySQL


Cú pháp

Kết hợp FORMAT() (thêm dấu phân cách nghìn) và CONCAT() (thêm ký hiệu tiền tệ):

SELECT CONCAT('KyHieuTienTe', FORMAT(ten_cot, so_chu_so_thap_phan)) AS ten_alias FROM ten_bang;

Ví dụ: Định dạng USD ($) không phần thập phân

1. Tạo bảng

mysql> CREATE TABLE AddingCurrencySymbolDemo ( 
-> Amount INT 
-> ); 
Query OK, 0 rows affected (1.50 sec)

2. Chèn dữ liệu

mysql> INSERT INTO AddingCurrencySymbolDemo VALUES(250); 
Query OK, 1 row affected (0.22 sec) 
mysql> INSERT INTO AddingCurrencySymbolDemo VALUES(500); 
Query OK, 1 row affected (0.22 sec) 
mysql> INSERT INTO AddingCurrencySymbolDemo VALUES(1000); 
Query OK, 1 row affected (0.16 sec) 
mysql> INSERT INTO AddingCurrencySymbolDemo VALUES(750); 
Query OK, 1 row affected (0.18 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM AddingCurrencySymbolDemo;
+--------+ 
| Amount | 
+--------+ 
| 250    | 
| 500    | 
| 1000   | 
| 750    | 
+--------+ 
4 rows in set (0.00 sec)

4. Chuyển đổi sang tiền tệ

mysql> SELECT CONCAT('$', FORMAT(Amount, 0)) AS AddedCurrency FROM AddingCurrencySymbolDemo;
+---------------+ 
| AddedCurrency | 
+---------------+ 
| $250          | 
| $500          | 
| $1,000        | 
| $750          | 
+---------------+ 
4 rows in set (0.00 sec)

Hàm FORMAT() chi tiết

FORMAT(number, decimal_places [, locale])
  • number: Số cần định dạng
  • decimal_places: Số chữ số sau dấu phẩy (0 = không có phần thập phân)
  • locale: Tùy chọn, ví dụ 'en_US', 'de_DE', 'vi_VN' (ảnh hưởng dấu phân cách)

Ví dụ FORMAT

SELECT 
    FORMAT(1234567.89, 2) AS us_format,      -- 1,234,567.89
    FORMAT(1234567.89, 2, 'de_DE') AS de_format, -- 1.234.567,89
    FORMAT(1234567.89, 0) AS no_decimal;      -- 1,234,568

Các ký hiệu tiền tệ phổ biến

Tiền tệKý hiệuVí dụ
USD$$1,234.56
EUR€€1.234,56
VND₫₫1.234.567
JPY¥¥1,234
GBP££1,234.56

Ứng dụng thực tế

Định dạng VNĐ (0 chữ số thập phân, locale vi_VN)

SELECT CONCAT('₫', FORMAT(amount, 0, 'vi_VN')) AS price_vnd FROM products;

Lưu trữ định dạng (computed column MySQL 8.0+)

ALTER TABLE products 
ADD COLUMN price_formatted VARCHAR(50) 
GENERATED ALWAYS AS (CONCAT('$', FORMAT(price, 2))) STORED;

Trong ứng dụng (Best Practice)

💡 Khuyên dùng: Định dạng ở tầng Application, không phải Database
  • Database lưu số nguyên (cents) hoặc DECIMAL chính xác
  • Frontend/Backend format theo locale người dùng
  • Tránh lưu chuỗi đã format -> khó tính toán, sort, filter

Lưu ý

  • FORMAT() trả về chuỗi (VARCHAR), không thể dùng cho tính toán tiếp
  • Làm tròn theo quy tắc chuẩn (0.5 lên)
  • Locale ảnh hưởng dấu phân cách nghìn và thập phân