MySQL cho phép lưu kết quả nối chuỗi vào biến người dùng (user-defined variable) bằng SET @variable := ... và dùng hàm CONCAT_WS() để nối nhiều cột với ký tự phân cách.
Ví dụ minh họa
Tạo bảng khách hàng:
mysql> CREATE TABLE DemoTable1433 (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientFirstName VARCHAR(20),
ClientLastName VARCHAR(20)
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1433 (ClientFirstName, ClientLastName) VALUES ('David', 'Miller');
Xem dữ liệu:
mysql> SELECT * FROM DemoTable1433;
+----------+-----------------+----------------+ | ClientId | ClientFirstName | ClientLastName | +----------+-----------------+----------------+ | 1 | David | Miller | +----------+-----------------+----------------+
Nối chuỗi và lưu vào biến
Sử dụng CONCAT_WS() (Concatenate With Separator):
mysql> SET @concat_variable := (
SELECT CONCAT_WS('-', ClientFirstName, ClientLastName)
FROM DemoTable1433
);
Hiển thị biến:
mysql> SELECT @concat_variable;
+------------------+ | @concat_variable | +------------------+ | David-Miller | +------------------+
So sánh CONCAT vs CONCAT_WS
| Hàm | Cú pháp | Xử lý NULL | Ví dụ kết quả |
|---|---|---|---|
CONCAT() | CONCAT(a, b, c) | Trả về NULL nếu bất kỳ tham số nào NULL | CONCAT('A', NULL, 'C') → NULL |
CONCAT_WS() | CONCAT_WS(sep, a, b, c) | Bỏ qua NULL, chỉ nối các giá trị không NULL | CONCAT_WS('-', 'A', NULL, 'C') → 'A-C' |
Ứng dụng thực tế
Nối họ tên, địa chỉ, hoặc tạo slug URL từ nhiều cột. Ví dụ tạo email:
SELECT CONCAT_WS('@', CONCAT_WS('.', LOWER(FirstName), LOWER(LastName)), 'company.com')
FROM Employees;