mysql для обновления базы данных с помощью НАБОРА ОБНОВЛЕНИЙ и ОБРЕЗКИ (НАЧАЛЬНЫЙ префикс подстановочного знака в записи

#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 ИЛИ

Я мог бы даже работать с

url= http://www.destination.com и просто выполните команду replace против части «url=» в качестве второй команды mysql.

Если бы была команда подстановочного знака, эта работа была бы намного проще, и я бы просто подстановил все, что отображается в записи ссылки между: 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:// НО за исключением этой небольшой аномалии, я БЛАГОДАРЮ ВАС. Я пару часов ломал голову, даже близко не приблизившись к успеху вашего кодового ремесла 😉