Thay thế chuỗi con trong cột TEXT/VARCHAR với REPLACE()
Hàm REPLACE(str, from_str, to_str) thay thế tất cả lần xuất hiện của from_str trong str bằng to_str. Kết hợp với UPDATE để sửa dữ liệu trực tiếp trong bảng.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (Code VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES
('8565-9848-7474'), ('9994-6464-8737'), ('6574-9090-7643');
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+----------------+ | Code | +----------------+ | 8565-9848-7474 | | 9994-6464-8737 | | 6574-9090-7643 | +----------------+
3. Truy vấn: Thay thế chuỗi cụ thể hoàn toàn
mysql> UPDATE DemoTable
SET Code = REPLACE(Code, '9994-6464-8737', '9994-9999-88888');
Kết quả: Query OK, 1 row affected ... Rows matched: 3 Changed: 1
4. Kiểm tra kết quả
mysql> SELECT * FROM DemoTable;
+-----------------+ | Code | +-----------------+ | 8565-9848-7474 | | 9994-9999-88888 | | 6574-9090-7643 | +-----------------+
Giải thích:
- Chỉ hàng 2 khớp chính xác '9994-6464-8737' → bị thay thế
- Hàng 1 và 3 không khớp → không đổi
Rows matched: 3(WHERE true cho tất cả),Changed: 1(chỉ 1 hàng thực sự đổi)
Các biến thể hữu ích:
- Thay thế 1 ký tự:
REPLACE(Code, '-', '/')(đổi tất cả gạch ngang thành gạch chéo) - Xóa ký tự:
REPLACE(Code, '-', '') - Có điều kiện:
UPDATE ... SET Code=REPLACE(Code,'A','B') WHERE Code LIKE '%A%' - Case-sensitive:
REPLACE(BINARY Code, 'abc', 'XYZ')
Lưu ý: REPLACE thay thế TẤT CẢ lần xuất hiện. Nên backup hoặc test SELECT trước: SELECT Code, REPLACE(Code,...) FROM DemoTable.