Có, phương án thay thế là CONCAT_WS() (Concatenate With Separator).
Tạo bảng demo
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100)
);
Query OK, 0 rows affected (0.74 sec)
Chèn dữ liệu
mysql> insert into DemoTable(StudentName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName) values('Bob');
Query OK, 1 row affected (0.12 sec)
Hiển thị dữ liệu
mysql> select * from DemoTable;
Kết quả
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Robert | | 3 | Bob | +-----------+-------------+ 3 rows in set (0.00 sec)
Sử dụng CONCAT_WS() với phân cách là 2 khoảng trắng (SPACE(2))
mysql> select concat_ws(SPACE(2), 'Student Name is:', StudentName) from DemoTable;
Kết quả
+-----------------------------------------------------+ | concat_ws(SPACE(2), 'Student Name is:', StudentName) | +-----------------------------------------------------+ | Student Name is: Chris | | Student Name is: Robert | | Student Name is: Bob | +-----------------------------------------------------+ 3 rows in set (0.04 sec)
So sánh CONCAT vs CONCAT_WS:
| Hàm | Cú pháp | Xử lý NULL | Phân cách |
|---|---|---|---|
| CONCAT | CONCAT(str1, str2, ...) | NULL → kết quả NULL | Phải tự thêm |
| CONCAT_WS | CONCAT_WS(sep, str1, str2, ...) | Bỏ qua NULL | Tự động chèn sep giữa các phần |
Ví dụ CONCAT_WS bỏ qua NULL:
SELECT CONCAT_WS('-', 'A', NULL, 'C'); -- Kết quả: 'A-C' (không phải NULL)
Khi nào dùng CONCAT_WS: Ghép nhiều cột với cùng phân cách, dữ liệu có thể NULL, xây dựng CSV, đường dẫn, v.v.