Trong MySQL, CONCAT_WS()
hàm cho phép bạn thêm dấu phân cách vào các chuỗi được nối. Nếu bạn chỉ sử dụng CONCAT()
, bạn sẽ không có dấu phân tách (trừ khi bạn đã thêm dấu phân tách một cách rõ ràng làm đối số giữa mỗi đối số chuỗi).
Cách sử dụng phổ biến của CONCAT_WS()
chức năng là tạo một danh sách được phân tách bằng dấu phẩy.
Đây là một ví dụ:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Kết quả:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Và bạn có thể thêm một khoảng trống vào đó nếu bạn muốn:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Kết quả:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
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à bất kỳ chuỗi nào.
Đâ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 = 'NZL';
Kết quả:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
Giá trị NULL
Nếu bất kỳ đối số nào là NULL
giá trị, MySQL 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(', ','Auckland', NULL, 'New Zealand') AS Location;
Kết quả:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Dấu phân tách giá trị NULL
Nếu chính dấu phân tách là NULL
giá trị, hoạt động nối sẽ trả về NULL
.
Ví dụ:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Kết quả:
+----------+ | Location | +----------+ | NULL | +----------+
Đây là một trong những điểm khác biệt giữa MySQL và T-SQL (SQL Server, Azure). Trong T-SQL, nếu dấu phân tách là NULL
giá trị, các giá trị chuỗi vẫn được nối với nhau, nhưng không có dấu phân tách.