Trong postgresql, làm cách nào để thay thế tất cả các phiên bản của chuỗi trong cột cơ sở dữ liệu?
Nói rằng tôi muốn thay thế tất cả các trường hợp cat
với dog
, ví dụ.
Cách tốt nhất để làm điều này là gì?
Trong postgresql, làm cách nào để thay thế tất cả các phiên bản của chuỗi trong cột cơ sở dữ liệu?
Nói rằng tôi muốn thay thế tất cả các trường hợp cat
với dog
, ví dụ.
Cách tốt nhất để làm điều này là gì?
Câu trả lời:
Bạn muốn sử dụng chức năng thay thế của postgresql :
replace(string text, from text, to text)
ví dụ :
UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')
Tuy nhiên, hãy lưu ý rằng đây sẽ là một sự thay thế theo chuỗi, vì vậy 'thể loại' sẽ trở thành 'giáo điều'. hàm regrec_Vplace có thể giúp bạn xác định mẫu khớp phù hợp hơn cho những gì bạn muốn thay thế.
regexp_replace
Nếu bạn cần kết hợp thay thế chặt chẽ hơn, regexp_replace
chức năng của PostgreQuery có thể khớp với các mẫu biểu thức chính quy POSIX. Nó có cú pháp regrec_Vplace (nguồn, mẫu, thay thế [, cờ]) .
Tôi sẽ sử dụng cờ i
và g
cho trường hợp tương ứng không phân biệt chữ hoa và chữ thường. Tôi cũng sẽ sử dụng \m
và \M
để phù hợp với đầu và cuối của một từ, tương ứng.
Thường có khá nhiều vấn đề khi thực hiện thay thế regex. Chúng ta hãy xem việc thay thế một con mèo bằng một con chó dễ dàng như thế nào .
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
--> Cat bobdog cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
--> dog bobcat cat cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
--> Cat bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
--> dog bobdog dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
--> dog bobcat dog dogs dogfish
SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
--> dog bobdog dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
--> dog bobcat dog cats catfish
SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
--> dog bobcat dog dogs catfish
Ngay cả sau tất cả những điều đó, có ít nhất một điều kiện chưa được giải quyết. Ví dụ: các câu bắt đầu bằng "Cat" sẽ được thay thế bằng "dog" chữ thường, cách viết hoa.
Kiểm tra các tài liệu phù hợp với mẫu PostgreSQL hiện tại để biết tất cả các chi tiết.
Cho ví dụ của tôi, có lẽ lựa chọn an toàn nhất sẽ là:
UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');
Bạn có thể sử dụng replace
chức năng
UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')
Định nghĩa hàm như sau (có từ đây ):
replace(string text, from text, to text)
và trả về văn bản sửa đổi. Bạn cũng có thể kiểm tra fiddle sql này .
Dưới đây là một ví dụ thay thế tất cả các phiên bản của 1 hoặc nhiều ký tự khoảng trắng trong một cột bằng dấu gạch dưới bằng biểu thức chính quy -
select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;