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;

79
UPDATE [table_name] SET [field_name] = ЗАМІНА ( [field_name], "foo", "bar");
Meetai.com

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

2
@treddell, позиції починаються з 1 у рядках SQL.
Алексіс Вілке

2
@inemanja, @Air без цього WHEREпункту ви робите UPDATEвсі рядки ...
Alexis Wilke

7
Як і Прінг, якщо ви збираєтесь залишити такий коментар, ви можете пояснити, чому. Це була помилка в оригінальній раді чи помилка з вашого боку? А ви знаєте, що перед тим, як внести якісь зміни в базу даних, ви повинні створити резервну копію?
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 = ЗАМЕНИТИ (поле, 'foo', 'bar') ДЕ поле LIKE '% foo%' AND otherfield = 'foo22'
Max

1

Функція Замінити рядок зробить це.


Працює для мене. Це залежить від того, як ви інтерпретуєте питання. Якщо вам потрібні записи бази даних для зміни, тоді використовуйте update. В іншому випадку це рішення набагато краще, оскільки його можна використовувати без оновлення полів.
Грубер

0

Я використав описаний вище командний рядок наступним чином: оновіть набір TABLE-NAME FIELD = замінити (FIELD, 'І', 'і'); мета полягала в заміні І на і ("А" має бути малі). Проблема полягає в тому, що я не можу знайти "І" в базі даних, але якщо я використовую на зразок "% And%", то він може знайти її разом із багатьма іншими, які є частиною слова, або навіть тими, що вже мають малі літери.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.