การรวมข้อความและจัดการ NULL ด้วย CONCAT() และ IFNULL()
ใน MySQL ฟังก์ชัน CONCAT() จะคืนค่า NULL หากมีอาร์กิวเมนต์ใดเป็น NULL ใช้ IFNULL() หรือ COALESCE() เพื่อแทนที่ NULL ก่อนรวม
ไวยากรณ์
SELECT CONCAT('Prefix: ', IFNULL(yourColumn, 'Default Value')) AS Result FROM yourTableName;
ตัวอย่างการใช้งาน
สร้างตารางชื่อ:
CREATE TABLE ConcatValues (
Id INT NOT NULL AUTO_INCREMENT,
FirstName VARCHAR(20),
MiddleName VARCHAR(20),
LastName VARCHAR(20),
PRIMARY KEY(Id)
);
เพิ่มข้อมูล (MiddleName บางรายการเป็น 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');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('Mary', 'Elizabeth', 'Smith');
รวมชื่อพร้อมจัดการ NULL:
SELECT CONCAT('The middle name is: ', IFNULL(MiddleName, 'Not Available')) AS MiddleName
FROM ConcatValues;
ผลลัพธ์:
+----------------------------------+
| MiddleName |
+----------------------------------+
| The middle name is: Elizabeth |
| The middle name is: Not Available|
| The middle name is: Not Available|
| The middle name is: Not Available|
+----------------------------------+
ฟังก์ชันจัดการ NULL อื่นๆ
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| IFNULL(expr, val) | MySQL เฉพาะ - คืนค่า val หาก expr เป็น NULL | IFNULL(col, 'N/A') |
| COALESCE(v1, v2, ...) | มาตรฐาน SQL - คืนค่าแรกที่ไม่ใช่ NULL | COALESCE(col1, col2, 'N/A') |
| NULLIF(expr1, expr2) | คืนค่า NULL หาก expr1 = expr2 | NULLIF(col, '') |
รวมหลายคอลัมน์พร้อมจัดการ NULL
-- ใช้ COALESCE สำหรับหลายคอลัมน์
SELECT CONCAT(
COALESCE(FirstName, ''), ' ',
COALESCE(MiddleName, ''), ' ',
COALESCE(LastName, '')
) AS FullName FROM ConcatValues;
-- หรือใช้ CONCAT_WS (skip NULL อัตโนมัติ)
SELECT CONCAT_WS(' ', FirstName, MiddleName, LastName) AS FullName FROM ConcatValues;
ข้อแตกต่าง CONCAT vs CONCAT_WS
CONCAT- คืนค่า NULL หากมีอาร์กิวเมนต์ใดเป็น NULLCONCAT_WS(separator, ...)- ข้าม NULL ไป โดยอัตโนมัติ ใส่ separator ระหว่างค่าที่ไม่ใช่ NULL