Путь регулярного выражения
Если вам нужно более строгое сопоставление замен, функция PostgreSQL regexp_replace
может сопоставляться с использованием шаблонов регулярных выражений POSIX. Он имеет синтаксис regexp_replace (источник, шаблон, замена [, флаги]) .
Я буду использовать флаги i
и g
для нечувствительного к регистру и глобального сопоставления соответственно. Я также буду использовать \m
и \M
для соответствия начала и конца слова соответственно.
Обычно при замене регулярных выражений существует довольно много ошибок. Давайте посмотрим, как легко заменить кошку на собаку .
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
--> Cat bobdog cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
--> dog bobcat cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
--> Cat bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
--> dog bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
--> dog bobcat dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
--> dog bobdog dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
--> dog bobcat dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
--> dog bobcat dog dogs catfish
Даже после всего этого есть по крайней мере одно нерешенное условие. Например, предложения, начинающиеся с «Cat», будут заменены строчными буквами «dog», которые разбивают заглавные буквы предложений.
Проверьте текущее соответствие шаблону PostgreSQL документам для всех деталей.
Обновить весь столбец с текстом замены
Учитывая мои примеры, возможно, самый безопасный вариант будет:
UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');