MySQL поиск и замена некоторого текста в поле


257

Какой запрос MySQL сделает текстовый поиск и заменит одно конкретное поле в таблице?

Т.е. искать fooи заменять на barтак что hello fooделается запись с полем со значением hello bar.

Ответы:


490

Измените table_nameи fieldсопоставьте имя таблицы и поле, о котором идет речь:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • ЗАМЕНА (строковые функции)
  • INSTR (строковые функции)

79
ОБНОВЛЕНИЕ [table_name] SET [field_name] = REPLACE ( [field_name], "foo", "bar");
Meetai.com

6
Я думаю, что быстрее не использовать WHERE instr(field, 'foo') > 0;(так что он не будет выполнять 2 поиска) ... Я ошибаюсь?
Инеманья

2
@treddell, никакие позиции не начинаются с 1 в строках SQL.
Алексис Уилке

2
@inemanja, @Air без WHEREпредложения вы делаете UPDATEна всех рядах ...
Алексис Уилке

7
Как и Pring, если вы собираетесь оставить такой комментарий, вы можете объяснить, почему. Была ли это ошибка в первоначальном совете или ошибка с вашей стороны? И вы знаете, что перед тем, как вносить какие-либо радикальные изменения в базу данных, вы должны сначала сделать ее резервную копию?
pdwalker


8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Как, например, если я хочу заменить все вхождения Джона Марком, я буду использовать ниже,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

И если вы хотите искать и заменять на основе значения другого поля, вы можете сделать CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

Просто чтобы это было здесь, чтобы другие сразу его нашли.



4

По моему опыту, самый быстрый метод

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

Этот INSTR()способ является вторым по быстродействию, и полное исключение этого WHEREпредложения является самым медленным, даже если столбец не проиндексирован.


Работает для меня, потому что мне нужно добавить еще один пункт, где. ОБНОВЛЕНИЕ table_name SET field = REPLACE (field, 'foo', 'bar') WHERE field LIKE '% foo%' AND otherfield = 'foo22'
Макс.

1

Функция замены строки сделает это.


Работает для меня. Это зависит от того, как вы интерпретируете вопрос. Если вам нужно изменить записи в базе данных, используйте update. В противном случае это решение намного лучше, так как его можно использовать без обновления полей.
Грубер

0

Я использовал приведенную выше командную строку следующим образом: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); цель состояла в том, чтобы заменить А на и («А» должно быть в нижнем регистре). Проблема в том, что он не может найти «И» в базе данных, но если я использую как «% And%», то он может найти его вместе со многими другими символами, которые являются частью слова, или даже те, которые уже в нижнем регистре.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.