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

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

528 голосов
/ 11 мая 2011

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

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

Ответы [ 5 ]

1219 голосов
/ 29 января 2013
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/

139 голосов
/ 11 мая 2011

Да, 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....
20 голосов
/ 11 мая 2011

Функция replace должна работать для вас.

REPLACE(str,from_str,to_str)

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

8 голосов
/ 30 января 2018

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

с предложением where-

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

без предложения where-

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

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

select REPLACE(columnName,'from','to') as updateRecord;
6 голосов
/ 13 октября 2013

В дополнение к ответу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...