





Это сделает строковая функция Заменять.
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
Помог мне. Для всех новичков, пожалуйста, снимите квадратные скобки.
Примечание для неосторожных: в этом ответе замените «field» на имя поля, которое вы хотите изменить. См. Ответы ниже для более четкого представления синтаксиса. В этом ответе "поле" является ключевым словом SQL нет.
Измените table_name и field, чтобы они соответствовали имени вашей таблицы и рассматриваемому полю:
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
ОБНОВЛЕНИЕ [table_name] SET [field_name] = REPLACE ([field_name], "foo", "bar");
Я думаю, что быстрее не использовать WHERE instr(field, 'foo') > 0; (чтобы он не выполнял 2 поиска) ... Я не прав?
Кто-нибудь может прокомментировать вопрос @nemanja? Было бы быстрее без предложения WHERE?
Не пропустит ли это предложение where по ошибке записи со строкой, которую вы ищете, находящейся в позиции 0 в поле? "INSTR (str, substr) Возвращает позицию первого вхождения подстроки substr в строке str." dev.mysql.com/doc/refman/5.0/en/…
@treddell, никакие позиции в строках SQL не начинаются с 1.
@inemanja, @Air без предложения WHERE вы делаете UPDATE для всех строк ...
Как и Принг, если вы собираетесь оставить такой комментарий, возможно, вы захотите объяснить, почему. Было ли это ошибкой в исходном совете или ошибкой с вашей стороны? И вы знаете, что перед тем, как вносить какие-либо радикальные изменения в базу данных, вы должны сначала создать ее резервную копию?
Я могу предложить еще одно практическое применение полной (плюс WHERE INSTR (...)) версии этого запроса: если вы моделируете запрос, например. с помощью такого инструмента, как PHPMyAdmin, версия, в которой отсутствует предложение WHERE, возвращает каждую строку в базе данных для моделирования. Не очень полезно для определения того, что изменится.
И если вы хотите искать и заменять на основе значения другого поля, вы можете выполнить CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
Просто чтобы этот был здесь, чтобы другие сразу его нашли.
Если вы процитируете имя поля, убедитесь, что вы используете правильные цитаты!
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Например, если я хочу заменить все вхождения John на Mark, я буду использовать ниже,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Я использовал приведенную выше командную строку следующим образом: обновить НАЗВАНИЕ ТАБЛИЦЫ set FIELD = replace (FIELD, 'And', 'and'); Цель заключалась в том, чтобы заменить And на and ("A" должно быть в нижнем регистре). Проблема в том, что он не может найти «И» в базе данных, но если я использую «% And%», он может найти его вместе со многими другими «И», которые являются частью слова, или даже теми, которые уже написаны в нижнем регистре.
По моему опыту, самый быстрый метод - это
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
Способ INSTR() является вторым по быстродействию, а полное исключение предложения WHERE является самым медленным, даже если столбец не проиндексирован.
Работает для меня, потому что мне нужно добавить еще один пункт, где. ОБНОВЛЕНИЕ имя_таблицы SET field = REPLACE (field, 'foo', 'bar') WHERE field LIKE '% foo%' AND otherfield = 'foo22'
Работает на меня. Это зависит от того, как вы интерпретируете вопрос. Если вам нужно изменить записи базы данных, используйте
update. В противном случае это решение намного лучше, поскольку его можно использовать без обновления полей.