PostgreSQL. Удалить текст начинающийся с одной строки, но имеющий различия в дальнейшем

В таблице есть колонка с описанием. Нужно убрать из этого описания последний блок текста. Этот блок всегда начинается с одной и той же строчки но в дальнейшем имеет различия.

Задача удалить этот блок во всей таблице не затронув текст который идет до него.

Пробовал реплейсом

UPDATE
   category
SET
   description = REPLACE (
    description,
    '<h2>Текст с которого начинается блок%',
    ''
   )
where description like '%<h2>Текст с которого начинается блок%'

Реплейс не окозазал эффекта, прсле применения запись продолжает находиться.

Пробовал составить регулярное выражение, но sql имеет свой диалект.

Известен метод которым можно выполнить такую операцию, или подходящая регулярка?


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

Автор решения: Wiktor Stribiżew

Реплейс не окозазал эффекта

И не окажет, так как в строке, по всей видимости, нет знака %, REPLACE "заменяет все вхождения в string подстроки from подстрокой to". См. документацию.

Используйте REGEXP_REPLACE:

REGEXP_REPLACE (description, '<h2>Текст с которого начинается блок.*', '')

Тут <h2>Текст с которого начинается блок – буквальный текст, а .* найдёт ноль и более любых символов.

→ Ссылка