Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách thêm dấu phân tách vào chuỗi nối trong SQL Server - CONCAT_WS ()

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách SHOWPLAN_XML hoạt động trong SQL Server

  2. Quyền truy cập bị từ chối khi đính kèm cơ sở dữ liệu

  3. Thực hiện regex (thay thế) trong một truy vấn SQL

  4. Sử dụng SolarWinds Serv-U trên Linux với Cơ sở dữ liệu xác thực máy chủ SQL

  5. Cắt ngắn (không làm tròn) các vị trí thập phân trong SQL Server