MySQL рядок замінити


559

У мене стовпець, що містить URL-адреси (id, url):

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

Я хотів би змінити слово "оновлення" на "новини". Чи можливо це зробити за допомогою сценарію?


Відповіді:


1283
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

Тепер ряди, які були схожі

http://www.example.com/articles/updates/43

буде

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/


23
Швидке запитання, чи дійсно потрібно мати пункт "ДЕ"?
Джон Кроуфорд

55
@JohnCrawford Згідно зі статтею за посиланням: "Вам не обов’язково потрібно додавати WHERE LIKEзастереження в кінці, тому що якщо текст для пошуку не знайдеться, рядок не буде оновлений, але це повинно прискорити роботу . "
Гіральді

3
ДЕРЖАВИЙ пункт надає вам специфічний контроль над тим, що замінюється. Без кожного кожного рядка буде перевірено і потенційно дані будуть замінені, якщо буде знайдено збіг.
Карлтон

11
Я вважаю, що в цьому випадку БУДЕ марно, оскільки а LIKE '%%'не використовує жодних індексів, якщо в цьому БУДЕ були інші частини, наприклад, щось подібне date_added > '2014-07-01'могло б допомогти
Фабріціо

13
Я завжди приїжджаю сюди для довідки, коли мені потрібно щось замінити у mysql
Даніель Печер

141

Так, MySQL має функцію REPLACE ():

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
    -> 'WwWwWw.mysql.com'

http://dev.mysql.com/doc/refman/5.0/uk/string-functions.html#function_replace

Зауважте, що простіше, якщо ви зробите цей псевдонім під час використання SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....

Поки ОП відображається updatesлише один раз у рядку, тоді це спрацює. В іншому випадку ви застрягли в прямій обробці струнами, що є справжнім болем у MySQL. У цей момент було б простіше написати одноразовий сценарій для вибору полів, маніпуляції в клієнті, а потім назад.
Марк Б

20

Функція заміни повинна працювати для вас.

REPLACE(str,from_str,to_str)

Повертає рядок str з усіма входженнями рядка from_str, замінені рядком to_str. REPLACE()виконує відповідність регістру під час пошуку від_str.


9

Ви можете просто скористатися функцією заміни (),

з де пунктом-

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

без де застереження-

update tabelName set columnName=REPLACE(columnName,'from','to');

Примітка. Вищенаведений запит, якщо для оновлення записів безпосередньо в таблиці, якщо ви хочете на вибір запиту, а дані не повинні впливати на таблицю, тоді можна використовувати наступний запит-

select REPLACE(columnName,'from','to') as updateRecord;

6

Окрім відповіді gmaggio, якщо вам потрібно динамічно REPLACEта UPDATEвідповідно до іншого стовпця, ви можете зробити, наприклад:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

У моєму прикладі рядок articles/news/зберігається в, other_table t2і немає необхідності використовувати LIKEв WHEREпункті.

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