sql >> Database teknologi >  >> RDS >> PostgreSQL

Regex fjerner alle forekomster af flere tegn i en streng

Brug den meget hurtigere translate() for dette simple tilfælde:

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

Hvert tegn i den anden parameter, der ikke har nogen modpart i den tredje parameter, erstattes med ingenting.

Løsningen med regulære udtryk kunne se sådan ud:

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

Det væsentlige element er den 4. parameter 'g' at erstatte "globalt" i stedet for kun den første kamp. Den anden parameter er en karakterklasse.
Du var på rette vej, kun et spørgsmål om syntaks for regexp_replace() .

Tip til OPDATERING

Hvis du ikke forventer alle rækker, der skal ændres, vil jeg kraftigt anbefale at tilpasse din OPDATERING erklæring:

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

På den måde undgår du (dyre) tomme opdateringer. (NULL dækkes automatisk i dette særlige tilfælde.)




  1. PRINT-sætning i T-SQL

  2. Konvertering af SQL Server varBinary-data til streng C#

  3. Oracle sql - datosubtraktion i en funktion

  4. Refaktorer en PL/pgSQL-funktion for at returnere output fra forskellige SELECT-forespørgsler