Använd den mycket snabbare translate()
för detta enkla fall:
UPDATE tbl SET text = translate(text, '(;<>)', '');
Varje tecken i den andra parametern som inte har någon motsvarighet i den tredje parametern ersätts med ingenting.
Lösningen med reguljära uttryck kan se ut så här:
regexp_replace(text, '[(;<>)]', '', 'g');
Det väsentliga elementet är den fjärde parametern 'g'
att ersätta "globalt" istället för bara första matchen. Den andra parametern är en teckenklass.
Du var på rätt väg, bara en fråga om syntax för regexp_replace()
.
Tips om UPPDATERING
Om du inte förväntar dig alla rader som ska ändras, rekommenderar jag starkt att du anpassar din UPPDATERING
uttalande:
UPDATE tbl
SET text = translate(text, '(;<>)', '')
WHERE text <> translate(text, '(;<>)', '');
På så sätt slipper du (dyra) tomma uppdateringar. (NULL
täcks automatiskt i detta särskilda fall.)