PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Regex премахва всички срещания на няколко знака в низ

Използвайте много по-бързия translate() за този прост случай:

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

Всеки знак във втория параметър, който няма аналог в третия параметър, се заменя с нищо.

Решението за регулярен израз може да изглежда така:

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

Съществен елемент е 4-тият параметър 'g' да замени "глобално", вместо само първия мач. Вторият параметър е символен клас.
Бяхте на прав път, просто въпрос на синтаксис за regexp_replace() .

Съвет за АКТУАЛИЗАЦИЯ

Ако не очаквате всички редове, които трябва да бъдат променени, силно препоръчвам да адаптирате своя АКТУАЛИЗАЦИЯ изявление:

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

По този начин избягвате (скъпи) празни актуализации. (NULL се покрива автоматично в този конкретен случай.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на публикации от неблокиращи потребители

  2. Psycopg2 заявка, връщаща Decimal('value')

  3. PostgreSQL:42883 Операторът не съществува:клеймо без часова зона =текст

  4. Postgres:Ограничение с отметка само върху INSERT

  5. Актуализирайте част (номер на поръчка), която е първичен ключ в Postgre