использование REGXP в MySQL для поиска и замены

0

Я пытаюсь найти и заменить протокол "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-запросы.

Теги:

2 ответа

2
Лучший ответ

У MySQL нет поддержки замены регулярных выражений (кроме, возможно, UDF, который вы можете написать сами). Но мы можем использовать REGEXP в WHERE вашего обновления:

UPDATE links
SET long_url = REPLACE(long_url, 'http://', 'https://')
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?domain\.com';
  • 0
    Как упомянул @TimBiegeleisen, в MySQL есть замечательная коллекция UDF, в которой есть REGEX с REGEX PREG .
  • 0
    Запрос Тима - ответ для меня. большое Вам спасибо
1

Поскольку согласованная строка всегда начинается с 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.

  • 0
    что значит "||" делать ?
  • 1
    @john_black - || аналогично OR для логических операций: dev.mysql.com/doc/refman/5.7/en/… ; это неправильно здесь. Правильный синтаксис включает CONCAT(...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню