sql >> Database >  >> RDS >> PostgreSQL

Regex verwijdert alle exemplaren van meerdere tekens in een tekenreeks

Gebruik de veel snellere translate() voor dit eenvoudige geval:

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

Elk teken in de tweede parameter dat geen tegenhanger heeft in de derde parameter wordt door niets vervangen.

De oplossing voor reguliere expressies kan er als volgt uitzien:

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

Essentieel element is de 4e parameter 'g' om "wereldwijd" te vervangen in plaats van alleen de eerste overeenkomst. De tweede parameter is een tekenklasse.
Je was op de goede weg, alleen een kwestie van syntaxis voor regexp_replace() .

Hint op UPDATE

Als je niet alles verwacht rijen die moeten worden gewijzigd, raad ik u ten zeerste aan om uw UPDATE . aan te passen verklaring:

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

Zo vermijd je (dure) lege updates. (NULL wordt in dit specifieke geval automatisch gedekt.)




  1. Een nieuwe waarde toevoegen aan een bestaand ENUM-type

  2. Mysql+php, hoe maak je een link die alle gegevens uit een record laat zien als je op de kop drukt

  3. SQL naar outfile - waar wordt het bestand opgeslagen? (MySQL, Windows)

  4. Zoek gebruiker in Laravel op gebruikersnaam