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

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

Т.е. найдите foo и замените на bar, чтобы запись с полем со значением hello foo стала hello bar.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
267
0
212 170
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Это сделает строковая функция Заменять.

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

Gruber 29.08.2012 13:38

UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

Помог мне. Для всех новичков, пожалуйста, снимите квадратные скобки.

Anantha Raju C 03.08.2017 07:40

Примечание для неосторожных: в этом ответе замените «field» на имя поля, которое вы хотите изменить. См. Ответы ниже для более четкого представления синтаксиса. В этом ответе "поле" является ключевым словом SQL нет.

Jonathan Ben-Avraham 28.09.2020 22:05
Ответ принят как подходящий

Измените 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");

Meetai.com 01.02.2013 10:49

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

inemanja 29.11.2013 20:32

Кто-нибудь может прокомментировать вопрос @nemanja? Было бы быстрее без предложения WHERE?

SBhojani 22.04.2014 12:39

Не пропустит ли это предложение where по ошибке записи со строкой, которую вы ищете, находящейся в позиции 0 в поле? "INSTR (str, substr) Возвращает позицию первого вхождения подстроки substr в строке str." dev.mysql.com/doc/refman/5.0/en/…

user898763452 18.07.2014 19:23

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

Alexis Wilke 25.06.2015 06:36

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

Alexis Wilke 25.06.2015 06:37

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

pdwalker 12.01.2017 09:35

Я могу предложить еще одно практическое применение полной (плюс WHERE INSTR (...)) версии этого запроса: если вы моделируете запрос, например. с помощью такого инструмента, как PHPMyAdmin, версия, в которой отсутствует предложение WHERE, возвращает каждую строку в базе данных для моделирования. Не очень полезно для определения того, что изменится.

wosevision 31.10.2018 16:21

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

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

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

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

200_success 02.06.2020 02:38

 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'

Max 02.04.2019 16:38

Другие вопросы по теме