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

Loại bỏ dấu chấm thập phân và tính tổng trong MySQL với REPLACE và SUM

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 ý

  • REPLACE thay thế TẤT CẢ lần xuất hiện.
  • Kết quả SUM trên chuỗi số lớn có thể tràn BIGINT → dùng CAST(... 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.