PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Regex entfernt alle Vorkommen mehrerer Zeichen in einer Zeichenfolge

Verwenden Sie den viel schnelleren translate() für diesen einfachen Fall:

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

Jedes Zeichen im zweiten Parameter, das kein Gegenstück im dritten Parameter hat, wird durch nichts ersetzt.

Die Lösung für reguläre Ausdrücke könnte wie folgt aussehen:

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

Wesentliches Element ist der 4. Parameter 'g' um "global" zu ersetzen, anstatt nur die erste Übereinstimmung. Der zweite Parameter ist eine Zeichenklasse.
Sie waren auf dem richtigen Weg, nur eine Frage der Syntax für regexp_replace() .

Hinweis auf UPDATE

Wenn Sie nicht alle erwarten Zeilen geändert werden, würde ich dringend dazu raten, Ihr UPDATE anzupassen Aussage:

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

So vermeiden Sie (teure) leere Updates. (NULL ist in diesem speziellen Fall automatisch abgedeckt.)