Обновить значение столбца, заменив часть строки

326

У меня есть таблица со следующими столбцами в базе данных MySQL

[id, url]

И URL-адреса, как:

 http://domain1.com/images/img1.jpg

Я хочу обновить все URL в другой домен

 http://domain2.com/otherfolder/img1.jpg

сохраняя имя файла как есть.

Какой запрос я должен выполнить?

Addev
источник
Возможный дубликат замены строки MySQL
Стив Чамберс

Ответы:

683
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
Дмитрий Шевченко
источник
162
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

соответствующие документы: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

Марк Б
источник
13
Привет, зачем мне где?
Гай Коэн,
14
@GuyCohen Потому что иначе запрос будет изменять каждую строку в таблице. Предложение WHEREоптимизирует запрос, чтобы изменить только строки с определенным URL. По логике, результат будет таким же, но добавление WHEREсделает операцию быстрее.
Дмитрий Шевченко
3
Он WHEREтакже гарантирует, что вы заменяете только те части строк, которые начинаются с http://etc/etc/или, string_to_be_replaced.например, в данном ответе http://domain1.com/images/this/is/a/testбудут затронуты, но foobar/http://domain1.com/images/не будут затронуты .
Кайл Чаллис
27

Попробуйте использовать функцию ЗАМЕНА :

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

Обратите внимание, что он чувствителен к регистру.

schellack
источник
2
@UniversalGrasp См. Много возможных ответов здесь: stackoverflow.com/questions/5656056/…
Джонатан Бержерон,
9

Вы нуждаетесь в WHERE условии , чтобы заменить ТОЛЬКО запись , которая соответствует условию в WHERE пункте (в отличие от всех записей). Вы используете знак % для обозначения частичной строки: IE

LIKE ('...//domain1.com/images/%');

означает все записи , которые НАЧАТЬ с "...//domain1.com/images/"и иметь что - либо после того, как (это %для ...)

Другой пример:

LIKE ('%http://domain1.com/images/%')

что означает все записи, которые содержат "http://domain1.com/images/"

в любой части строки ...

Кеннет Дейли
источник
7

Попробуй это...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');
МаниМаран А
источник
1

Сначала нужно проверить

ВЫБЕРИТЕ * ОТ universityГДЕ название курса НРАВИТСЯ '% & amp%'

Далее нужно обновить

ОБНОВЛЕНИЕ университета SET Course_name = REPLACE (название_курса, '& amp', '&') WHERE id = 1

Результаты: Инженерные и усилительные технологии => Инженерные и технологические

TechyFlick
источник