MySQL строка заменить

560

У меня есть столбец, содержащий 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

Я хотел бы изменить слово «обновления» на «новости». Возможно ли это сделать с помощью скрипта?

n00b
источник
2
Возможный дубликат MySql - способ обновить часть строки?
Стив Чемберс

Ответы:

1285
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
Предложение WHERE дает вам определенный контроль над тем, что заменяется. Без одного будет проверяться каждая строка и, возможно, будут заменены данные, если совпадение найдено.
Карлтон
11
Я считаю, что в этом случае WHERE бесполезен, потому что a LIKE '%%'не использует никаких индексов, если в этом WHERE были другие части, например что-то вроде того, date_added > '2014-07-01'что могло бы помочь
Fabrizio
13
Я всегда прихожу сюда для справки, когда мне нужно что-то заменить в MySQL
Даниэль Печер
141

Да, MySQL имеет функцию REPLACE ():

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

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

Обратите внимание, что проще использовать псевдоним при использовании SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....
onteria_
источник
Пока ОП updatesотображается только один раз в строке, это будет работать. В противном случае вы застряли с прямым манипулированием строк, что является реальной болью в MySQL. В этот момент было бы проще написать одноразовый скрипт для выбора полей, манипулирования в клиенте и последующей обратной записи.
Марк Б
20

Функция замены должна работать на вас.

REPLACE(str,from_str,to_str)

Возвращает строку str со всеми вхождениями строки from_str, замененной строкой to_str. REPLACE()выполняет поиск с учетом регистра при поиске from_str.

сойка
источник
9

Вы можете просто использовать функцию replace (),

с где пункт-

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

без оговорки

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

Примечание. Приведенный выше запрос предназначен для обновления записей непосредственно в таблице, если вы хотите выполнить запрос select и данные не должны быть затронуты в таблице, тогда можно использовать следующий запрос:

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предложении.

RafaSashi
источник