PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Regex loại bỏ tất cả các lần xuất hiện của nhiều ký tự trong một chuỗi

Sử dụng translate () cho trường hợp đơn giản này:

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

Mọi ký tự trong tham số thứ hai không có bản sao trong tham số thứ ba sẽ được thay thế bằng không.

Giải pháp biểu thức chính quy có thể trông giống như sau:

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

Yếu tố cần thiết là tham số thứ 4 'g' để thay thế "toàn cầu" thay vì chỉ so khớp đầu tiên. Tham số thứ hai là một lớp ký tự.
Bạn đã đi đúng hướng, chỉ là vấn đề cú pháp cho regexp_replace () .

Gợi ý về UPDATE

Nếu bạn không mong đợi tất cả hàng sẽ được thay đổi, tôi thực sự khuyên bạn nên điều chỉnh UPDATE của bạn tuyên bố:

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

Bằng cách này, bạn tránh được các bản cập nhật trống rỗng (đắt tiền). ( NULL sẽ tự động được đề cập trong trường hợp cụ thể này.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào để * không * sử dụng các câu lệnh được chuẩn bị từ phía máy chủ trong Postgresql không?

  2. Django makemigrations Không phát hiện thấy thay đổi nào trong ứng dụng

  3. Nhận danh sách các bảng mà một khung nhìn / bảng phụ thuộc vào trong PostgreSQL

  4. Docker Compose + Postgres:Cổng tiếp xúc

  5. pg_restore Alternatives - PostgreSQL Backup và Automatic Recovery with ClusterControl