2015-10-06 4 views
0

Я пытаюсь заменить некоторый текст в столбце - текст, который я подтвердил, существует. Когда я запускаю запрос:MySQL - UPDATE часть строки в столбце

SELECT Body FROM dbname.tcontent 
where body like '%http://local.website.org%' 
and display=1 
and approved=1; 

он возвращает 359 записей. Таким образом, я ожидал 359 записей, которые будут изменены, когда я выполнил этот запрос:

update dbname.tcontent 
set Body = replace(Body, 'http://local.website.org', '/foldername') 
where instr(Body, 'http://local.website.org') > 0 
and display=1 
and approved=1; 

Однако запрос найдено 359 матчей, но не обновляется столбцов. Сообщение читает: «0 строк (-ов) затронуто Соответствие строк: 359 Изменено: 0 Предупреждения: 0. Я уверен, что у меня правильный SQL-код, поскольку я подтвердил его по крайней мере из трех источников. 359 «спичка» основаны на записях, соответствующих ИНЕК, и поэтому я считаю, что проблема с этой второй линией:.

set Body = replace(Body, 'http://local.website.org', '/foldername') 

даже если SQL правильно я непроверенный «Безопасное обновление» в моем предпочтения только для того, чтобы быть уверенными, и все же ни одна строка не обновляется.

Я все еще думаю, что, возможно, косые черты и/или точки в тексте, который я заменяю, отключают метод замещения, несмотря на то, что я делаю то, что хочу here.

Заранее благодарим за любую помощь!

ответ

1

Попробуйте этот запрос вместо:

UPDATE `dbname`.`tcontent` 
SET `body`= REPLACE(`body`, 'FindThisText', 'ReplaceWithThisText') 
WHERE `body` like '%FindThisText%' AND `display`=1 and `approved`=1; 

Всегда резервную таблицу перед выполнением таких UPDATE запросов.

+1

Спасибо за ваш ответ. Я должен был добавить, что я также пробовал эту инструкцию UPDATE. Тот же результат: «0 строк (-ов) затронуто Соответствие строк: 359 Изменено: 0 Предупреждения: 0« – Andy

+0

Что делать, если вы пытаетесь обновить одну строку? Можете ли вы это сделать? – itoctopus

+0

Я уверен, что может: UPDATE table set SiteID = 'abc', где tcontentid = 'def': «1 строка (-ы) затронута. Строки согласованы: 1 Изменено: 1 Предупреждения: 0. Хорошая мысль, однако. Еще раз спасибо за сообщение. – Andy

1

Не работает ли это?

Set Body = 'ReplaceWithThisText'?

+0

Привет, kendra. Этот точный запрос (с предложением where) работает. Строка обновляется. Однако при вызове метода REPLACE в столбце Body для замены частичного текста, который, как я знаю, существует, строки не обновляются :-( – Andy

2

По какой-то причине мне пришлось разбить его на два заявления. Заявление о первом обновлении заменило http: // ничем, а второе заменило оставшуюся часть URL-адреса:

update database.tcontent set Body = replace(Body, 'http://', '') where Body like '%http://local.website.org%'; 
update database.tcontent set Body = replace(Body, 'local.website.org', '/foldername') where Body like '%local.website.org%'; 
Смежные вопросы