PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Regex supprime toutes les occurrences de plusieurs caractères dans une chaîne

Utilisez le translate() pour ce cas simple :

UPDATE tbl SET text = translate(text, '(;<>)', '');

Chaque caractère du deuxième paramètre qui n'a pas d'équivalent dans le troisième paramètre est remplacé par rien.

La solution d'expression régulière pourrait ressembler à ceci :

regexp_replace(text, '[(;<>)]', '', 'g');

L'élément essentiel est le 4ème paramètre 'g' pour remplacer "globalement" au lieu de simplement la première correspondance. Le deuxième paramètre est une classe de caractères.
Vous étiez sur la bonne voie, juste une question de syntaxe pour regexp_replace() .

Conseil sur UPDATE

Si vous ne vous attendez pas à tous lignes à modifier, je vous conseille vivement d'adapter votre UPDATE déclaration :

UPDATE tbl
SET    text =  translate(text, '(;<>)', '')
WHERE  text <> translate(text, '(;<>)', '');

De cette façon, vous évitez les mises à jour vides (coûteuses). (NULL est couvert automatiquement dans ce cas particulier.)