Vấn đề
Cột Price lưu chuỗi có ký hiệu tiền tệ (ví dụ: '€200.00'), cần tính tổng giá trị số.
Giải pháp: REPLACE + SUM
Tạo bảng:
CREATE TABLE DemoTable616 (Price VARCHAR(100));
INSERT INTO DemoTable616 VALUES ('€200.00'), ('€300.00'), ('€500.00');
Truy vấn tổng:
SELECT SUM(REPLACE(Price, '€', '')) AS Total_Price
FROM DemoTable616;
Kết quả:
+-------------+
| Total_Price |
+-------------+
| 1000 |
+-------------+
Giải thích
REPLACE(Price, '€', ''): Loại bỏ ký hiệu € → '200.00', '300.00', '500.00'.- MySQL tự ép kiểu chuỗi số thành DECIMAL khi dùng trong
SUM(). - Kết quả là số (không có ký hiệu tiền tệ).
Mở rộng: Nhiều loại tiền tệ
SELECT SUM(
CAST(
REPLACE(REPLACE(REPLACE(Price, '€', ''), '$', ''), '£', '')
AS DECIMAL(10,2))
) AS Total_Price
FROM DemoTable616;
Best Practice: Thiết kế đúng
Tách cột số và cột currency:
CREATE TABLE prices (
amount DECIMAL(10,2) NOT NULL,
currency CHAR(3) NOT NULL DEFAULT 'EUR', -- ISO 4217
CHECK (currency IN ('EUR','USD','VND','GBP'))
);
Lợi ích: Index, tính toán nhanh, chính xác, hỗ trợ multi-currency, exchange rate.
Định dạng hiển thị (Formatting)
-- Thêm ký hiệu khi SELECT
SELECT CONCAT('€', FORMAT(SUM(amount), 2)) AS formatted_total
FROM prices
WHERE currency = 'EUR';
Kết quả: €1,000.00 (có dấu phẩy ngăn cách hàng nghìn).