ОБНОВИТЬ базу данных mysql, заменить строки

#mysql #replace

#mysql #заменить

Вопрос:

У меня в моей базе данных есть строки, подобные www.domain.com и http://www.domain.com. Я хочу добавлять ко всем записям http: //, но не затрагивать другие URL-адреса, и в результате получаю это:http://http://www.domain.com

Можно ли это сделать только с помощью mysql? Я использовал REPLACE(поле,’www’,’http://www ‘), но это также заменяет http://www с http://http://www

Заранее спасибо

Редактировать

Я забыл упомянуть, что в поле могут быть записи, которые не содержат www или http://www и поэтому я не хочу изменять, или, может быть, есть записи типа <p><a href="www.domain.com/">domain</a></p> , в которых CONCAT () добавляет http:// перед <p>

Ответ №1:

Попробуйте добавить WHERE предложение к вашему обновлению, чтобы обновлять только те поля, в которых еще нет ‘http: //’. Протестируйте это следующим образом

  SELECT CONCAT('http://', field) FROM foo WHERE LOCATE('http://', field)=0
  

и ваш UPDATE синтаксис был бы:

 UPDATE foo SET field=CONCAT('http://',field) WHERE LOCATE('http://', field)=0
  

Комментарии:

1. 1, LOCATE также является другим приемлемым вариантом.

Ответ №2:

Я не буду беспокоиться о производительности, поскольку это похоже на одноразовый скрипт. Тем не менее, вы можете объединить LEFT и CONCAT для достижения этого:

 UPDATE  mytable
SET     mycolumn = CONCAT('http://',mycolumn)
WHERE   LEFT(mycolumn,7) <> 'http://'
  

Обратите внимание, что я не принимаю во внимание заглавные буквы. Вы также можете рассмотреть возможность очистки информации либо перед добавлением ее в базу данных, либо, возможно, создать триггер, который сделает это за вас.

Ответ №3:

Запрос поиска и замены — mysql replace

Вот SQL-запрос для замены строки в вашей таблице базы данных MySQL:

 UPDATE table_name SET column_name = REPLACE(column_name,'original_string','replace_string')
  

Вот что я сделал, чтобы изменить URL-адреса path во всех моих предыдущих сообщениях.

 UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`,'http://localhost/','https://sureshkamal1.wordpress.com/')
  

Комментарии:

1. Почему нет WHERE ? Это слишком много лишнего? Стоит ли чего-нибудь добавить что-то вроде WHERE column_name LIKE CONCAT('%s', 'original_string', '%') ? Интересно…