Я пытаюсь найти и заменить протокол "http" на "https" в определенных доменах в моей базе данных MySql в таблице "ссылок", содержащей только URL-адреса.
Я бы использовал функцию REPLACE, если бы я изменил ВСЕ URL-адреса на "https". но из-за определенных доменов я должен использовать REGEXP:
SELECT long_url
FROM links
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?domain\.com'
так что я дошел до стадии поиска. Я просмотрел документы и на данный момент я не вижу возможности выполнить замену с результатом, полученным из запроса sql.
обратите внимание, что у меня есть только доступ к базе данных MySql, у меня нет PHP или чего-либо, чтобы запускать что-либо более умное, чем SQL-запросы.
У MySQL нет поддержки замены регулярных выражений (кроме, возможно, UDF, который вы можете написать сами). Но мы можем использовать REGEXP
в WHERE
вашего обновления:
UPDATE links
SET long_url = REPLACE(long_url, 'http://', 'https://')
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?domain\.com';
Поскольку согласованная строка всегда начинается с http: вы можете сделать следующее:
SELECT 'https' || SUBSTRING(long_url , 4)
FROM links
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?openu\.ac\.il'
UPDATE links
SET long_url = 'https' || SUBSTRING(long_url , 4)
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?openu\.ac\.il'
Я не знаю никакой функции замены mysql regex.
||
аналогично OR
для логических операций: dev.mysql.com/doc/refman/5.7/en/… ; это неправильно здесь. Правильный синтаксис включает CONCAT(...)
MySQL
есть замечательная коллекция UDF, в которой естьREGEX
с REGEX PREG .