sql замена куска текста

Подскажите запрос. Имеем в базе строки вида:

... src="https://i025.domen.rr/0711/ba/7d4125179384.jpg" height= ...
... src="https://y88e.domen.rr/09/fgf7f77fdd" height= ...
... src="https://6tee.domen.rr/09eerre/u77474u4u4.png" height= ...

и т.д. domen.rr всегда неизменен. Нужно заменить все что в "" на "https://svoi.cc" на выходе что бы получилось:

... src="https://svoi.cc" height= ...
... src="https://svoi.cc" height= ...
... src="https://svoi.cc" height= ...

и т.д.


Ответы (1 шт):

Автор решения: Герман Борисов

Решение сильно зависит от диалекта самой СУБД, которую вы не указали.

Вариант 1.

Скорее всего одним UPDATE не получится, придётся писать хранимую процедуру.

  1. Найти в строке положение src="
  2. Найти в строке положение ", которое после найденной ранее позиции + 5 (длина первой подстроки). Функции поиска подстроки как правило принимают третий необязательный параметр, который указывает стартовую позицию поиска.
  3. Вырезать строку между ними. Если она like 'https://%domen.rr%, то собрать новую строку из того что в оригинальной до первой позиции, 'src="https://svoi.cc' и того что после второй.

Вариант 2.

Работает только если СУБД поддерживает замену регулярными выражениями.

Найти в строке src="https://([^"/]*\.)?domen.rr/[^"]*" и заменить на src="https://svoi.cc"

Пояснения к регулярке:

  • [^"/]*\. — что угодно кроме кавычки и слэша любое количество раз, и точка в конце. Находит поддомен
  • [^"]* — что угодно кроме кавычки любое количество раз. Находит текст ссылки до конца.
→ Ссылка