Trong SQL Server, bạn có thể sử dụng T-SQL REPLACE()
hàm để thay thế tất cả các trường hợp của một chuỗi đã cho bằng một chuỗi khác. Ví dụ:bạn có thể thay thế tất cả các lần xuất hiện của một từ nhất định bằng một từ khác.
Cú pháp
Đây là cú pháp chính thức:
REPLACE ( string_expression , string_pattern , string_replacement )
Trong đó string_expression
là chuỗi chứa một hoặc nhiều bản sao của chuỗi (hoặc chuỗi con) cần thay thế, string_pattern
là chuỗi để thay thế và string_replacement
là chuỗi để thay thế nó.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');
Kết quả:
My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.
Vì vậy, trong ví dụ này, chúng tôi chỉ cần thay thế từ some
với từ no
.
Nhiều từ
Tất nhiên, không có quy tắc nào nói rằng bạn chỉ có thể thay thế một từ bằng một từ (và ngược lại). Sau cùng, chúng tôi chỉ đơn giản là thay thế một chuỗi bằng một chuỗi khác, bất kể chuỗi đó có chứa từ, chữ cái, số, dấu cách, v.v.
Vì vậy, chúng tôi có thể dễ dàng thay thế một từ đó bằng hai hoặc nhiều từ:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');
Kết quả:
My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.
Vì vậy, ở đây chúng tôi thay thế từ some
với các từ lots of
.
Xóa một từ
Bạn cũng có thể xóa một từ (hoặc chuỗi con) khỏi chuỗi. Để thực hiện việc này, chỉ cần thay thế nó bằng chuỗi trống:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
Kết quả:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Tuy nhiên, nếu bạn quan sát kỹ, bạn sẽ thấy rằng chuỗi mới chứa khoảng trắng kép mà chúng tôi đã loại bỏ từ này. Điều này là do từ mà chúng tôi đã xóa có khoảng trắng ở bên trái và bên phải của nó. Chúng tôi đã xóa từ nhưng chúng tôi không xóa bất kỳ khoảng trắng nào, do đó, vẫn còn hai khoảng trắng.
Chúng tôi có thể sửa lỗi này bằng cách thêm một trong các khoảng trắng trong từ cần xóa:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
Kết quả:
My apartment has art hanging on the walls and pot plants hanging from the ceiling.
Hãy cẩn thận!
Rất dễ mắc lỗi khi sử dụng REPLACE()
chức năng (hoặc bất kỳ tìm và thay thế chức năng cho vấn đề đó).
Ví dụ, lỗi này:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
Kết quả:
My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Như bạn có thể thấy, chúng tôi đã thay thế từ art
với pictures
. Tuy nhiên, trong trường hợp này từ apartment
cũng bị ảnh hưởng - nó đã chuyển thành apicturesment
, mà không được dự định. Điều này là do từ apartment
chứa chuỗi con art
.
Bạn thường có thể bảo vệ khỏi điều này bằng cách thêm dấu cách xung quanh từ tìm kiếm, cũng như từ thay thế:
SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
Kết quả:
My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.
Điều này rõ ràng giả định rằng bạn đang thay thế toàn bộ từ. Bạn sẽ cần đánh giá từng tình huống khi nó phát sinh.
Đối chiếu / Phân biệt chữ hoa chữ thường
Bạn có thể sử dụng COLLATE
tùy chọn mệnh đề để áp dụng một đối chiếu rõ ràng cho đầu vào. Điều này có thể hữu ích để thực hiện các thao tác tìm / thay thế phân biệt chữ hoa chữ thường và các thao tác tương tự.
Dưới đây là một ví dụ so sánh hai đối chiếu.
Phân biệt chữ hoa chữ thường
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');
Kết quả:
Dogs, Dogs, and more Dogs!
Trong ví dụ này, đối chiếu mà chúng tôi chỉ định bao gồm _CI
trong tên của nó, có nghĩa là "Không phân biệt chữ hoa chữ thường". Điều này khiến tất cả các lần xuất hiện được thay thế, mặc dù lần xuất hiện đầu tiên có các ký tự viết hoa.
Bạn sẽ nhận thấy rằng phương pháp này không ảnh hưởng đến trường hợp của chuỗi được thay thế.
Phân biệt chữ hoa chữ thường
SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');
Kết quả:
Cats, Dogs, and more Dogs!
Trong ví dụ này, đối chiếu mà chúng tôi chỉ định bao gồm _CS
trong tên của nó, có nghĩa là "Phân biệt chữ hoa chữ thường". Điều này gây ra sự xuất hiện đầu tiên của Cat
bị bỏ qua, vì ký tự đầu tiên của nó là một chữ cái viết hoa (không khớp với trường hợp của đối số thứ hai).