Giới thiệu
Khi cột số được lưu dưới dạng chuỗi (VARCHAR) chứa dấu chấm (ví dụ: '50.60', '40.30.20'), dùng REPLACE() xóa dấu chấm rồi SUM() để tính tổng.
Ví dụ thực hành
1. Tạo bảng DemoTable857
mysql> CREATE TABLE DemoTable857 (Price VARCHAR(100));
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable857 VALUES ('50.60'),('40.30.20'),('10.20');
3. Xóa dấu chấm và cộng dồn
mysql> SELECT SUM(REPLACE(Price, '.', '')) AS SumOfAll FROM DemoTable857;
4. Kết quả
+----------+
| SumOfAll |
+----------+
| 409100 |
Giải thích: '50.60'→'5060', '40.30.20'→'403020', '10.20'→'1020'. Tổng = 5060+403020+1020 = 409100.
⚠️ Vấn đề logic dữ liệu
- Giá trị
'40.30.20'có 2 dấu chấm → không phải số hợp lệ. Xóa dấu chấm tạo ra số vô nghĩa (403020). - Cần làm sạch dữ liệu ở nguồn hoặc dùng kiểu số (
DECIMAL) thay vì VARCHAR.
Cách đúng cho dữ liệu tiền tệ
-- Nếu cột lưu '50.60' (1 dấu chấm) → chuyển DECIMAL
SELECT SUM(CAST(Price AS DECIMAL(10,2))) FROM DemoTable857;
-- Nếu phải xử lý chuỗi bẩn: chỉ xóa dấu chấm cuối (thập phân)
-- Giả định format: số nguyên.part1.part2... → muốn số nguyên + part1 làm thập phân
-- Phức tạp, tốt nhất normalize dữ liệu trước.
Lưu ý
REPLACEthay thế TẤT CẢ lần xuất hiện.- Kết quả
SUMtrên chuỗi số lớn có thể tràn BIGINT → dùngCAST(... AS DECIMAL(30,0)). - Luôn kiểm tra dữ liệu đầu vào:
SELECT Price FROM DemoTable857 WHERE Price LIKE '%.%.%'tìm giá trị bất thường.