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

386

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

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

Теги:
replace

4 ответа

924
Лучший ответ
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

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

  • 20
    Быстрый вопрос, действительно ли нужно иметь предложение "ГДЕ"?
  • 49
    @JohnCrawford В соответствии со статьей в ссылке: «Не обязательно добавлять в конце предложение WHERE LIKE , потому что, если текст для поиска отсутствует, строка не будет обновлена, но это должно ускорить процесс. вверх . "
Показать ещё 6 комментариев
129

Да, 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....
  • 0
    Пока updates ОП появляются в строке только один раз, это будет работать. В противном случае вы застряли с прямым манипулированием строк, что является реальной болью в MySQL. В этот момент было бы проще написать одноразовый скрипт для выбора полей, манипулирования в клиенте и последующей обратной записи.
11

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

REPLACE(str,from_str,to_str)

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

6

В дополнение к gmaggio answer, если вам нужно динамически 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню