Привет.

Как-то у меня возникла необходимость поменять некоторые значения в базе. Точнее требовалось заменить часть строки в полях одной таблицы при переносе сайта, сегодня я делюсь с вами этим решением.

Этот код может пригодиться когда вы меняете формат данных, например, пути к файлам при смене хостинга или номера телефонов, вы хранили их в виде +79ххххххххх, а решили хранить как 9ххххххххх. Если вам надо заменить только часть строки оставив остальное без изменений, т.е. как раз подстроку в строке в этом случае этот запрос вам ооочень пригодится.

Собственно запрос:

UPDATE table SET field = REPLACE(field, 'что_заменить', 'чем_заменить');

table_name — имя таблицы
field_name — имя поля в котором производим замену подстроки

Пример использования:

UPDATE uploads SET path = REPLACE(path, '/var/www/', '/var/home/site/htdocs/');

Таким образом путь к файлу /var/www/upload/file_name.ext превратится в /var/home/site/htdocs/upload/file_name.ext и ваш сайт будет хорошо работать на новом хостинге.

Удачи, хорошего вам кода и красивых решений.

Замена подстроки в строке в MySQL

7 комментариев к “Замена подстроки в строке в MySQL

  • 13.08.2015 в 14:39
    Постоянная ссылка

    Гранмерси, как раз проблема с заменой части путей возникла, думал придется рекурсию по детям мутить, а потом подумал — наверное можно как-то подстроку прямо в mysql везде заменить. Сэкономил кучу времени. Удачи!

    Ответить
  • 30.01.2016 в 20:52
    Постоянная ссылка

    Не, не всё корректно. Получаю не результат, а — Data too long for column ‘model’ at row 1. Причём даже phpmyadmin не справляется

    Ответить
    • 16.03.2016 в 20:19
      Постоянная ссылка

      Видимо текст в поле слишком длинный. Покажите запрос вызывающий ошибку, тип поля и данные.

      Ответить
  • 19.12.2016 в 12:48
    Постоянная ссылка

    А как во всех таблицах и во всех полях замену провести? Можно такой sql запрос написать или внешними средствами пользоваться, например, скрипт на php написать

    Ответить
  • 04.05.2017 в 11:59
    Постоянная ссылка

    Это не будет работать, если в таблице есть подстрока вида ‘stroka’ и еще одна подстрока вида ‘stroka2’.

    Ваш запрос

    UPDATE table SET field = REPLACE(field, ‘stroka’, ‘2222’) WHERE field LIKE %stroka%;

    зваменит все подстроки где есть ‘stroka’ на ‘2222’

    А строка «stroka2′ примет вид ‘22222’.

    Так вот, что делать если нужно оставить значение ‘stroka’ прежним, применить REPLACE только к строкам, у которых ‘stroka2’ ?

    Добавление WHERE в конец вашего запроса типа WHERE field LIKE %stroka%
    (как и вариации LIKE типа stroka% или %stroka) не вернут ничего.

    Что тогда делать?

    Ответить
    • 19.05.2017 в 18:30
      Постоянная ссылка

      Не понял что вам надо сделать.
      Если вы хотите заменить ‘stroka’ на ‘2222’ только там где значение ‘stroka2’ то вам надо фильтровать по WHERE field = ‘stroka2’ или если фильтруете подстроке, то WHERE field LIKE ‘%stroka2%’;

      Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

90% сайтов рунета содержат уязвимости и могут быть взломаны! Проверь свой сайт!