#mysql #set #sql-update #wildcard #trim
#mysql #установить #sql-обновление #подстановочный знак #обрезать
Вопрос:
В моей базе данных у меня есть таблица с именем «содержимое» и поле с именем «ссылка», и в этой таблице почти 300 000 записей.
В поле под названием «ссылка» есть несколько записей, которые выглядят следующим образом :
http://www.example.com/blah/blah/123456789/url=http://www.destination.com
К сожалению, префиксная часть записей индивидуально уникальна, где пронумерованная часть постоянно изменяется от 90 до 150 буквенно-цифровых символов
Я хотел бы удалить префикс до и / или включая URL-адрес =
Так что единственное, что осталось в записи :
http://www.destination.com ИЛИ
Я мог бы даже работать с
Если бы была команда подстановочного знака, эта работа была бы намного проще, и я бы просто подстановил все, что отображается в записи ссылки между: http://www.example.com/blah/blah / подстановочный url= Но, как всем известно … такого подстановочного знака нет
Итак, я посмотрел на UPDATE, SET и TRIM (ВЕДУЩИЕ команды
UPDATE content
SET link
= TRIM(ВЕДУЩИЙ ‘url=’ FROM link
)
Но это НЕ привело к изменениям, которые я хотел
И поэтому я выбрал трудоемкий метод загрузки базы данных и использования программы поиска и замены, чтобы внести изменения в 44 тысячи записей, которые содержали эти параметры.
Но я хотел бы найти команду, которую я мог бы просто передать в базу данных, чтобы упростить это в будущем.
Любые мысли о том, как выполнить это изменение в будущем, будут высоко оценены.
Заранее спасибо ;
Ответ №1:
Вы можете использовать функцию SUBSTRING_INDEX:
UPDATE content SET link=SUBSTRING_INDEX( `link` , 'url=', -1 )
Я не тестировал его, поэтому я бы рекомендовал вам сначала проверить, что substring_index возвращает нужную строку.
Ответ №2:
Предполагая, что часть, которую вы хотите сохранить, всегда начинается с ‘http: //’, вы можете получить желаемую результирующую строку с помощью функции SUBSTRING_INDEX:
SELECT CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1)) FROM content;
и исправьте вашу таблицу с помощью простого оператора
UPDATE
content
SET
link = CONCAT('http://', SUBSTRING_INDEX(link, 'http://', -1));
Объяснение:
SUBSTRING_INDEX с отрицательным третьим параметром возвращает подстроку от последнего появления иглы во втором параметре до конца. Поскольку ‘http: //’ не включен в возвращаемое значение, мы добавляем его снова.
Примечание:
Если у вас также есть URL-адреса https: //, вы сможете адаптировать мое решение.
Комментарии:
1. Кажется, это работает и исправляет части префикса thoae. Одна странность во время его выполнения заключается в том, что, похоже, не различает, начинается ли запись с https:// или http:// Поэтому, если я возьму инструкцию и просто заменю https:// там, где у него есть http://, он затем продолжит изменять все записи, чтобы они начинались с https: //// И наоборот, если бы я переключил оператор обратно на http://, он затем продолжил бы изменять все записи, чтобы они начинались с http:// НО за исключением этой небольшой аномалии, я БЛАГОДАРЮ ВАС. Я пару часов ломал голову, даже близко не приблизившись к успеху вашего кодового ремесла 😉