Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL CONCAT คอลัมน์ที่มีค่า NULL ด้วย IFNULL() กันผลลัพธ์เป็น NULL

เมื่อ CONCAT() พบค่า NULL ในอาร์กิวเมนต์ใดก็ตาม ผลลัพธ์จะเป็น NULL ทั้งหมด ต้องใช้ IFNULL() หรือ COALESCE() แทนที่ NULL ด้วยสตริงว่าง '' ก่อน

ตัวอย่างปัญหาและวิธีแก้

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1793 (
    StudentFirstName VARCHAR(20),
    StudentLastName VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล (มี NULL)

mysql> INSERT INTO DemoTable1793 VALUES('John', 'Smith');
mysql> INSERT INTO DemoTable1793 VALUES('Carol', NULL);
mysql> INSERT INTO DemoTable1793 VALUES(NULL, 'Brown');

3. แสดงข้อมูลเดิม

mysql> SELECT * FROM DemoTable1793;
+------------------+-----------------+
| StudentFirstName | StudentLastName |
+------------------+-----------------+
| John             | Smith           |
| Carol            | NULL            |
| NULL             | Brown           |
+------------------+-----------------+

4. ❌ CONCAT ธรรมดา (ผลลัพธ์เป็น NULL)

mysql> SELECT CONCAT(StudentFirstName, StudentLastName) FROM DemoTable1793;
+------------------------------------------------+
| CONCAT(StudentFirstName, StudentLastName)      |
+------------------------------------------------+
| JohnSmith                                      |
| NULL                                           |  -- Carol + NULL = NULL
| NULL                                           |  -- NULL + Brown = NULL
+------------------------------------------------+

5. ✅ ใช้ IFNULL() แทนที่ NULL ด้วย ''

mysql> SELECT CONCAT(IFNULL(StudentFirstName, ''), IFNULL(StudentLastName, '')) 
    FROM DemoTable1793;

6. ผลลัพธ์ที่ถูกต้อง

+----------------------------------------------------------------+
| CONCAT(IFNULL(StudentFirstName,''), IFNULL(StudentLastName,'')) |
+----------------------------------------------------------------+
| JohnSmith                                                      |
| Carol                                                          |
| Brown                                                          |
+----------------------------------------------------------------+

ฟังก์ชันจัดการ NULL

ฟังก์ชันคำอธิบายตัวอย่าง
IFNULL(expr, val)MySQL Specific: ถ้า expr IS NULL คืน valIFNULL(NULL, '') = ''
COALESCE(val1, val2, ...)ANSI Standard: คืนค่าแรกที่ NOT NULLCOALESCE(NULL, '', 'fallback') = ''
NULLIF(val1, val2)คืน NULL ถ้า val1 = val2NULLIF('', ' ') = NULL

แนะนำ: ใช้ CONCAT_WS (Concatenate With Separator)

-- ข้าม NULL อัตโนมัติ ไม่ต้อง IFNULL
SELECT CONCAT_WS(' ', StudentFirstName, StudentLastName) FROM DemoTable1793;
-- ผลลัพธ์: 'John Smith', 'Carol', 'Brown'

สรุป

CONCAT() จะคืน NULL ถ้ามีอาร์กิวเมนต์ NULL ใดๆ ใช้ IFNULL(col, '') หรือ COALESCE(col, '') แทนที่ NULL ก่อน CONCAT หรือใช้ CONCAT_WS(sep, ...) ซึ่งข้าม NULL อัตโนมัติและใส่ Separator ให้