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ạngdecimal_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ệu | Ví 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