PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Regex remove todas as ocorrências de vários caracteres em uma string


Use o muito mais rápido translate() para este caso simples:
UPDATE tbl SET text = translate(text, '(;<>)', '');

Cada caractere no segundo parâmetro que não tem contrapartida no terceiro parâmetro é substituído por nada.

A solução de expressão regular pode ser assim:
regexp_replace(text, '[(;<>)]', '', 'g');

O elemento essencial é o 4º parâmetro 'g' para substituir "globalmente" em vez de apenas a primeira correspondência. O segundo parâmetro é uma classe de caracteres.
Você estava no caminho certo, apenas uma questão de sintaxe para regexp_replace() .

Dica sobre UPDATE


Se você não espera todos linhas a serem alteradas, eu recomendo fortemente que você adapte seu UPDATE declaração:
UPDATE tbl
SET    text =  translate(text, '(;<>)', '')
WHERE  text <> translate(text, '(;<>)', '');

Dessa forma, você evita atualizações vazias (caras). (NULL é coberto automaticamente neste caso particular.)