Hàm REPLACE(str, from_str, to_str) thay thế tất cả lần xuất hiện của from_str bằng to_str trong chuỗi. Dùng trong UPDATE để sửa dữ liệu hàng loạt.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu có chuỗi '______' cần thay:
CREATE TABLE DemoTable1574 (StudentCode VARCHAR(20));
INSERT INTO DemoTable1574 VALUES
('111_Carol'), ('______'), ('David_12345'), ('______');
Thay '______' bằng 'Mike_007':
UPDATE DemoTable1574 SET StudentCode = REPLACE(StudentCode, '______', 'Mike_007');
Kết quả
| StudentCode (trước) | StudentCode (sau) |
|---|---|
| 111_Carol | 111_Carol |
| ______ | Mike_007 |
| David_12345 | David_12345 |
| ______ | Mike_007 |
Các lưu ý quan trọng
- Thay thế tất cả lần xuất hiện:
REPLACE('aaa', 'a', 'b')→'bbb'. - Phân biệt chữ hoa/thường: Mặc định case-insensitive (tuỳ collation). Dùng
REPLACE(BINARY col, ...)để case-sensitive. - Không dùng REGEXP:
REPLACEchỉ thay chuỗi cố định, không hỗ trợ pattern. - An toàn: Chạy
SELECTtrước để kiểm tra:SELECT StudentCode, REPLACE(StudentCode, '______', 'Mike_007') FROM DemoTable1574;
Thay thế nhiều ký tự cùng lúc
MySQL không có TRANSLATE như Oracle/PostgreSQL. Cách thay thế: lồng REPLACE:
UPDATE t SET col = REPLACE(REPLACE(REPLACE(col, 'a', '1'), 'b', '2'), 'c', '3');
Hoặc MySQL 8.0+: REGEXP_REPLACE(col, '[abc]', {'a':'1','b':'2','c':'3'}) (xem bài 1003075233).
Ứng dụng thực tế
- Dọn dữ liệu: xóa ký tự điều khiển, chuẩn hóa phone/email.
- Masking dữ liệu: thay số thẻ tín dụng
REPLACE(card, SUBSTRING(card,5,8), '****'). - Chuẩn hóa import CSV: thay
','thành'.'cho số thập phân.