sql >> Databasteknik >  >> RDS >> PostgreSQL

Regex tar bort alla förekomster av flera tecken i en sträng

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




  1. Exportera en MySQL/MariaDB-databas

  2. Postgres:välj summan av värden och summera sedan detta igen

  3. Hur får man dimensionen av en DECLAREd variabel i SPs?

  4. DISTINCT ON i django