Trong SQL Server và Azure, nếu bạn cần nối hai hoặc nhiều chuỗi, bạn có thể sử dụng T-SQL CONCAT()
hàm số. Như với bất kỳ thao tác nối cơ bản nào, hàm này nối các chuỗi lại với nhau, end-to-end.
Nhưng nếu bạn cần thêm dấu phân cách giữa mỗi chuỗi thì sao?
Ví dụ:bạn có thể muốn tạo một danh sách các chuỗi được phân tách bằng dấu phẩy. Trong trường hợp này, bạn muốn chèn dấu phẩy vào giữa mỗi chuỗi. Như thế này:
Paris, France
Thay vì điều này:
ParisFrance
May mắn thay, T-SQL cung cấp CONCAT_WS()
chức năng giúp bạn thực hiện chính xác điều đó. CONCAT_WS()
hàm hoạt động giống như CONCAT()
, ngoại trừ việc nó cần một đối số bổ sung - dấu phân tách bạn muốn sử dụng.
Đây là một ví dụ:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Kết quả:
Location ------------ Paris,France
Và bạn có thể thêm một khoảng trống vào đó nếu bạn muốn:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Kết quả:
Location ------------- Paris, France
Dấu phân cách
Không có gì để nói rằng dấu phân cách phải là dấu phẩy. Dấu phân tách có thể là một biểu thức của bất kỳ loại ký tự nào (char
, nchar
, nvarchar
hoặc varchar
).
Đây là ví dụ tương tự như ví dụ trước, ngoại trừ ví dụ này sử dụng dấu phân tách khác.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Kết quả:
Location -------------- Paris - France
Một ví dụ về cơ sở dữ liệu
Dưới đây là một ví dụ về truy xuất dữ liệu từ cơ sở dữ liệu và kết hợp hai cột thành một, được phân tách bằng dấu phẩy:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
Kết quả:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
Giá trị NULL
Nếu bất kỳ đối số nào là NULL
giá trị, SQL Server sẽ bỏ qua giá trị đó và dấu phân tách của nó, nhưng nó vẫn sẽ xử lý các giá trị khác.
Ví dụ:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Kết quả:
Location ------------- Paris, France
Dấu phân tách giá trị NULL
Nếu chính dấu phân tách là NULL
giá trị, thao tác nối sẽ vẫn được thực hiện nhưng không có dấu phân tách.
Ví dụ:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Kết quả:
Location ----------- ParisFrance
Đây là một trong những điểm khác biệt giữa T-SQL và MySQL (MySQL cũng có CONCAT_WS()
hàm số). Trong MySQL, nếu dấu phân tách là NULL
giá trị, kết quả nối là NULL
giá trị.