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

257

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

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

Julz
источник

Ответы:

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
86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
thesmallprint
источник
2
Помог мне. Для всех noobs, пожалуйста, удалите квадратные скобки.
Ананта Раджу,
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'));

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

basdog22
источник
Если вы цитируете имя поля, убедитесь, что вы используете правильные цитаты !
200_success
4

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

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

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

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

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

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

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

Шванн
источник