Вы можете сделать это с помощью функций регулярных выражений, хотя это немного сложно, потому что MySQL / MariaDB не поддерживает захват группы.
Вы можете идентифицировать часть строки, которую нужно заменить на регулярное выражение 'href="[^"]+"'
.
С другой стороны, вы можете захватить целевой URL с помощью '>[^<]+'
(это означает: все символы после '>'
до достижения '<'
). Таким образом, это дает вам строку замены:
substring(regexp_substr(link, '>[^<]+') from 2)
Конечное выражение:
regexp_replace(
link,
'href="[^"]+"',
concat('hef="https://', substring(regexp_substr(link, '>[^<]+') from 2), '"')
)
Демонстрация на DB Fiddle
Исходные данные:
select link from mytable;
| link |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a href="https://example.com/full/?api=0aca610f4a9983fc1fa30brs6c302f970ae87c29da&url=aHR0cHM6Ly93d3c0Mi56aXBwfseXNoYXJlLmNvbS92L1IwVlNwZkk4L2ZpbGUuaHRtbA==&type=2" target="_blank" rel="noreferrer noopener">www.example.net/v/R0V82dSpfI8/file.html</a> |
| <a href="https://example.com/full/?api=sd4a5sdf540c1fa30b6c302f9704a6sadf&url=asdfa54asd5fa5sdfa8dRcFFcafasdf==&type=2" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a> |
Запрос:
select
regexp_replace(
link,
'href="[^"]+"',
concat('hef="https://', substring(regexp_substr(link, '>[^<]+') from 2), '"')
) new_link
from mytable
| new_link |
| :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a hef="https://www.example.net/v/R0V82dSpfI8/file.html" target="_blank" rel="noreferrer noopener">www.example.net/v/R0V82dSpfI8/file.html</a> |
| <a hef="https://example.org/000hcwoc0kcwy1/545da45a.rar.html" target="_blank" rel="noreferrer noopener">example.org/000hcwoc0kcwy1/545da45a.rar.html</a> |