MySQL обновляет часть записи после X много символов - PullRequest
0 голосов
/ 09 марта 2019

Допустим, у меня есть запись типа https://stackoverflow.com//questions/, как-то это произошло, и я хочу обновить запись как https://stackoverflow.com/questions/.

До сих пор я думал о замене каждого вхождения //, но этосломал бы https:// часть как http:/.

Я определил все поврежденные записи с помощью:

SELECT TRIM(TRAILING SUBSTRING_INDEX(url, '//', -1) FROM url) FROM table_name WHERE length(TRIM(TRAILING SUBSTRING_INDEX(url, '//', -1) FROM url)) > 8;

Это проверяет после 8 символов, так что все http:// и https:// вхождения пропущены.В настоящее время в этой ситуации 302 URL-адреса.

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Заменить дважды.

Итак, проблема в том, что https:// становится https:/? Просто означает, что вам нужно снова добавить 1 потерянный слеш.

UPDATE yourtable
SET url = REPLACE(REPLACE(url,'//','/'),':/','://')
WHERE url LIKE '%://%//%'
1 голос
/ 09 марта 2019

Проверьте это:

SET @val = 'https://stackoverflow.com//questions/';

select 
  concat(
    substr(@val, 1, instr(@val, '//') + 1), 
    replace(substr(@val, instr(@val, '//') + 2),'//', '/')
)

заменяет все вхождения // после 1-го на /
Смотрите демо
Таким образом, вы можете использовать его в обновлении:

update tablename
set mycolumn = concat(
        substr(mycolumn, 1, instr(mycolumn, '//') + 1), 
        replace(substr(mycolumn, instr(mycolumn, '//') + 2),'//', '/')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...