Khi truy vấn dữ liệu bằng SQL, nhu cầu thao tác với các kết quả dựa trên chuỗi là rất phổ biến. Có nhiều tùy chọn trên các hệ thống cơ sở dữ liệu quan hệ chính cho nhiệm vụ này. Trong bài viết này, chúng ta sẽ thảo luận về trường hợp sử dụng và chức năng của hàm REPLACE SQL.
Bắt đầu với R EPLACE
Tất cả mọi người đều biết đến chức năng TÌM và THAY THẾ vì nó đi kèm với bất kỳ trình soạn thảo văn bản nào. ANSI SQL cung cấp chức năng REPLACE dưới dạng một chức năng hệ thống tích hợp sẵn. Trong bài viết này, tôi sẽ sử dụng SQL Server làm RDMS mà tôi lựa chọn.
R EPLACE Tham số chức năng
REPLACE (string_expression, string_pattern, string_replacement)
String_expression là một chuỗi sẽ được chuyển đổi, nó có thể là một chuỗi đơn hoặc một cột từ một truy vấn SQL đến.
String_pattern là một mẫu tìm kiếm được áp dụng cho biểu thức chuỗi sẽ được thay thế.
String_replacement là giá trị thay thế được áp dụng cho chuỗi khi string _pattern được so khớp với string_expression .
Hãy xem một số ví dụ để hiểu rõ hơn về chức năng THAY THẾ.
Tạo dữ liệu mẫu
Đối với ví dụ này, tôi sẽ tạo một bảng tạm thời được sử dụng với chức năng REPLACE. Tên cột sẽ khớp với các giá trị tham số của hàm.
IF OBJECT_ID(N'tempdb..#TEMP_REPLACE_DEMO') IS NOT NULL
DROP TABLE #TEMP_REPLACE_DEMO
CREATE TABLE #TEMP_REPLACE_DEMO
(
ID INT IDENTITY(1,1),
STRING_EXPRESSION VARCHAR(2000),
STRING_PATTERN VARCHAR(200),
STRING_REPLACEMENT VARCHAR(200)
)
--REPLACE THE VALUE CAR WITH FOX
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('The red car is the fastest car in the race.','car','fox')
--REPLACE THE VALUE 4 WITH 8
INSERT INTO #TEMP_REPLACE_DEMO
VALUES('There are 4 model ford cars in the parking lot.','4','8')
--REMOVE THE BLANK SPACE CHARACTER
INSERT INTO #TEMP_REPLACE_DEMO
VALUES(' This sentence has irregular spacing . ',' ','')
R EPLACE đơn giản và năng động Ví dụ
Bây giờ bảng đã được tải với một số dữ liệu mẫu, hãy kiểm tra cách THAY THẾ chức năng có thể được áp dụng cho dữ liệu ở mức cơ bản và sau đó ở mức năng động hơn.
Trong ví dụ đầu tiên, các tham số được mã hóa cứng dưới dạng giá trị chuỗi cho hàm.
--REPLACE THE VALUE CAR WITH FOX
SELECT REPLACE('The red car is the fastest car in the race.','car','fox') AS RESULT_FOR_SENTENCE
Các giá trị cũng có thể được đọc động từ bảng. Trong trường hợp này, tất cả các giá trị biểu thức, mẫu và thay thế đều được đọc trực tiếp từ bảng thay vì được mã hóa cứng.
--DYNAMIC EXAMPLE FOR ALL COLUMNS IN THE TABLE.
SELECT ID,REPLACE(STRING_EXPRESSION,STRING_PATTERN,STRING_REPLACEMENT) AS RESULT_FOR_TABLE
FROM #TEMP_REPLACE_DEMO
Kết quả cho ID 1 giống như ví dụ trên, chỉ khác là các giá trị được đọc từ các cột riêng lẻ.
Thay thế lồng nhau
Hàm REPLACE cũng có thể được sử dụng trong một dung lượng lồng nhau. Điều này có nghĩa là kết quả của hàm REPLACE bên trong có thể trở thành tham số STRING_EXPRESSION của hàm thay thế bên ngoài.
Dưới đây là một số ví dụ về mẫu này trên dữ liệu mẫu:
--REPLACE THE VALUE CAR WITH FOX | REPLACE THE VALUE "fastest" WITH "slowest"
SELECT REPLACE(REPLACE('The red car is the fastest car in the race.','car','fox'),'fastest','slowest')
--REMOVE THE BLANK SPACE CHARACTER | REPLACE THE VALUE "irregular" with "no"
SELECT REPLACE(REPLACE(' This sentence has irregular spacing . ',' ',''),'irregular','NO')
Đối chiếu và R EPLACE trong SQL
Đối chiếu là một yếu tố quan trọng cần xem xét khi làm việc với dữ liệu chuỗi và hàm REPLACE. Đối chiếu có thể được đặt ở nhiều cấp của cơ sở dữ liệu, chẳng hạn như cấp tài khoản hoặc phiên bản, cơ sở dữ liệu, lược đồ, phiên hoặc cấp bảng. Cài đặt này có thể ảnh hưởng đến cách hoạt động của hàm REPLACE.
Trong ví dụ này, bạn có thể không mong đợi chữ A viết hoa được thay thế bằng chữ thường b. Nhưng nó phụ thuộc vào đối chiếu đang được kế thừa với kết nối hiện tại với cơ sở dữ liệu.
--REPLACEMENT WITHOUT EXPLICIT COLLATION.
SELECT REPLACE('A','a','b') AS DEFAULT_COLLATION
Kết quả này khớp từ a với A do đối chiếu.
Cài đặt đối chiếu trong SQL Server có thể được kiểm tra ở cấp máy chủ:
--VIEW CURRENT COLLATION
SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'));
Chìa khóa ở đây là CI, viết tắt của phân biệt chữ hoa chữ thường. Để áp dụng hàm REPLACE trong khả năng phân biệt chữ hoa chữ thường, tham số string_expression có thể được đối chiếu một cách rõ ràng.
-- USE COLLATE TO MATCH CHARACTER CASING FOR REPLACE
SELECT REPLACE('A' COLLATE Latin1_General_CS_AS ,'a','b') as Explicit_Collation;
Trong ví dụ này, vì tham số string_expression được đối chiếu dưới dạng phân biệt chữ hoa chữ thường, nên hàm REPLACE không thay thế giá trị ban đầu.
Tóm tắt
Hàm REPLACE là một công cụ tuyệt vời để thao tác chuỗi cơ bản và nâng cao trên nhiều hệ thống cơ sở dữ liệu quan hệ. Bài viết này đã xem xét ứng dụng cơ bản của hàm REPLACE, cách sử dụng nó trong một dung lượng động. Chúng tôi cũng đã thảo luận về việc sử dụng REPLACE như một hàm lồng nhau và cách đối chiếu có thể ảnh hưởng đến kết quả mà nó trả về.