Câu trả lời:
Thay đổi table_name
và field
để phù hợp với tên bảng và trường của bạn trong câu hỏi:
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
WHERE instr(field, 'foo') > 0;
(vì vậy nó sẽ không thực hiện 2 tìm kiếm) ... Tôi có sai không?
WHERE
điều khoản bạn thực hiện UPDATE
trên tất cả các hàng ...
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Ví dụ như, nếu tôi muốn thay thế tất cả các lần xuất hiện của John bằng Mark, tôi sẽ sử dụng bên dưới,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Và nếu bạn muốn tìm kiếm và thay thế dựa trên giá trị của một lĩnh vực khác, bạn có thể thực hiện CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
Chỉ cần có cái này ở đây để những người khác sẽ tìm thấy nó ngay lập tức.
Theo kinh nghiệm của tôi, phương pháp nhanh nhất là
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
Các INSTR()
cách là nhanh nhất thứ hai và bỏ qua các WHERE
khoản hoàn toàn là chậm nhất, thậm chí nếu cột không được lập chỉ mục.
Tôi đã sử dụng dòng lệnh trên như sau: update TABLE-NAME set FIELD = thay thế (FIELD, 'And', 'và'); mục đích là để thay thế Và bằng và ("A" nên viết thường). Vấn đề là nó không thể tìm thấy "Và" trong cơ sở dữ liệu, nhưng nếu tôi sử dụng như "% And%" thì nó có thể tìm thấy nó cùng với nhiều từ khác và là một phần của một từ hoặc thậm chí là những từ viết thường.
[field_name]
, "foo", "bar");