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.)