PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Regex usuwa wszystkie wystąpienia wielu znaków w ciągu

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd na ALTER TYPE w relacji postgres nie istnieje

  2. Pula połączeń Jboss AS7 nie łączy się ponownie

  3. Sprawdź, czy sekwencja istnieje w Postgresie (plpgsql)

  4. PostgreSQL GeoJSON <- php -> JavaScript

  5. Import PostgreSQL CSV z wiersza poleceń