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