#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', '%')
? Интересно…