Użyj znacznie szybszego translate()
w tym prostym przypadku:
UPDATE tbl SET text = translate(text, '(;<>)', '');
Każdy znak w drugim parametrze, który nie ma odpowiednika w trzecim parametrze, jest zastępowany niczym.
Rozwiązanie wyrażenia regularnego mogłoby wyglądać tak:
regexp_replace(text, '[(;<>)]', '', 'g');
Niezbędnym elementem jest czwarty parametr 'g'
zastąpić „globalnie” zamiast tylko pierwszego meczu. Drugi parametr to klasa znaku.
Byłeś na dobrej drodze, tylko kwestia składni regexp_replace()
.
Wskazówka dotycząca AKTUALIZACJI
Jeśli nie oczekujesz wszystkich wiersze do zmiany, zdecydowanie radzę dostosować swoją AKTUALIZACJĘ
oświadczenie:
UPDATE tbl
SET text = translate(text, '(;<>)', '')
WHERE text <> translate(text, '(;<>)', '');
W ten sposób unikniesz (drogich) pustych aktualizacji. (NULL
w tym konkretnym przypadku jest automatycznie pokrywana).