Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Nối chuỗi (CONCAT) và xử lý NULL trong MySQL

Trong MySQL, hàm CONCAT() trả về NULL nếu bất kỳ đối số nào là NULL. Để xử lý trường hợp này, dùng IFNULL() hoặc COALESCE() thay thế giá trị NULL trước khi nối.

Cú pháp

-- Cách 1: IFNULL (2 đối số)
SELECT CONCAT('Tiền tố: ', IFNULL(ten_cot, 'Giá trị mặc định')) AS ket_qua FROM ten_bang;

-- Cách 2: COALESCE (nhiều đối số, trả về giá trị đầu tiên không NULL)
SELECT CONCAT('Tiền tố: ', COALESCE(ten_cot1, ten_cot2, 'Mặc định')) AS ket_qua FROM ten_bang;

-- Cách 3: CONCAT_WS (nối với dấu phân cách, tự bỏ qua NULL)
SELECT CONCAT_WS(', ', ten_cot1, ten_cot2, ten_cot3) AS ket_qua FROM ten_bang;

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE ConcatValues (
    Id INT NOT NULL AUTO_INCREMENT,
    FirstName VARCHAR(20),
    MiddleName VARCHAR(20),
    LastName VARCHAR(20),
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (có MiddleName là NULL)

INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('John', NULL, 'Smith');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('Carol', NULL, 'Taylor');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('David', NULL, 'Miller');
-- Thêm bản ghi có MiddleName để so sánh
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('Mary', 'Elizabeth', 'Smith');

3. Xem dữ liệu

SELECT * FROM ConcatValues;

Kết quả:

+----+-----------+------------+----------+
| Id | FirstName | MiddleName | LastName |
+----+-----------+------------+----------+
| 1  | Mary      | Elizabeth  | Smith    |
| 2  | John      | NULL       | Smith    |
| 3  | Carol     | NULL       | Taylor   |
| 4  | David     | NULL       | Miller   |
+----+-----------+------------+----------+

4. Nối chuỗi xử lý NULL với IFNULL

SELECT CONCAT('The middle name is: ', IFNULL(MiddleName, 'Not Available')) AS MiddleName
FROM ConcatValues;

Kết quả:

+----------------------------------+
| MiddleName                       |
+----------------------------------+
| The middle name is: Elizabeth    |
| The middle name is: Not Available|
| The middle name is: Not Available|
| The middle name is: Not Available|
+----------------------------------+

5. Nối nhiều cột với CONCAT_WS (khuyên dùng)

SELECT CONCAT_WS(' ', FirstName, MiddleName, LastName) AS FullName
FROM ConcatValues;

Kết quả:

+--------------------------+
| FullName                 |
+--------------------------+
| Mary Elizabeth Smith     |
| John Smith               |
| Carol Taylor             |
| David Miller             |
+--------------------------+

CONCAT_WS (Concatenate With Separator) tự động bỏ qua các giá trị NULL, rất tiện cho nối tên, địa chỉ.

So sánh các hàm xử lý NULL

HàmSố đối sốHành vi
IFNULL(expr, val)2Trả về val nếu expr là NULL
COALESCE(v1, v2, ...)≥2Trả về giá trị đầu tiên không NULL
CONCAT_WS(sep, ...)≥2Nối chuỗi với dấu phân cách, bỏ qua NULL

Lưu ý

  • CONCAT() trả về NULL nếu có bất kỳ đối số NULL → Luôn dùng IFNULL/COALESCE
  • CONCAT_WS() bỏ qua NULL → Lý tưởng cho nối nhiều cột có thể NULL
  • COALESCE chuẩn ANSI SQL, IFNULL chỉ có MySQL