Vấn đề: Thay thế tất cả ký tự cụ thể trong cột
Cần xóa hoặc thay thế một ký tự (ví dụ: gạch dưới _) xuất hiện nhiều lần trong chuỗi của cột.
Giải pháp: Kết hợp REPLACE() trong UPDATE
Hàm REPLACE(str, from_str, to_str) trả về chuỗi mới với tất cả from_str được thay bằng to_str. Dùng trong SET của UPDATE.
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (
Code VARCHAR(20)
);
INSERT INTO DemoTable VALUES
('John_123'),
('32189_Sam_987'),
('Miller_David_456_909');
2. Dữ liệu trước khi thay thế
+----------------------+
| Code |
+----------------------+
| John_123 |
| 32189_Sam_987 |
| Miller_David_456_909 |
+----------------------+
3. Câu lệnh UPDATE
UPDATE DemoTable
SET Code = REPLACE(Code, '_', '');
Thay mọi ký tự _ bằng chuỗi rỗng (xóa bỏ).
4. Kết quả sau cập nhật
+-------------------+
| Code |
+-------------------+
| John123 |
| 32189Sam987 |
| MillerDavid456909 |
+-------------------+
Mở rộng: Thay thế chuỗi con
-- Thay 'old_' bằng 'new_'
UPDATE DemoTable SET Code = REPLACE(Code, 'old_', 'new_');
-- Thay nhiều ký tự: lồng REPLACE
UPDATE DemoTable SET Code = REPLACE(REPLACE(Code, '_', ''), '-', '');
Lưu ý
REPLACEphân biệt chữ hoa/chữ thường (case-sensitive) trong MySQL mặc định (collation *_ci thì không phân biệt).- Cập nhật toàn bảng – hãy chắc chắn điều kiện
WHEREnếu chỉ muốn thay một phần dữ liệu. - Với dữ liệu lớn, cân nhắc chia batch để tránh khóa bảng quá lâu.