คำอธิบาย
ใช้ CASE WHEN ... IS NULL THEN ... ELSE ... END แทนค่า NULL ด้วยข้อความที่กำหนด หรือใช้ IFNULL() สั้นกว่า
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
FirstName varchar(20) );
Query OK, 0 rows affected (1.15 sec)
การเพิ่มข้อมูล (มี NULL)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.09 sec)
แสดงข้อมูลก่อน
mysql> select * from DemoTable;
ผลลัพธ์:
+-----------+ | FirstName | +-----------+ | John | | NULL | | Adam | | NULL | +-----------+ 4 rows in set (0.00 sec)
คิวรี่ CASE WHEN แทนที่ NULL
mysql> select case when FirstName is NULL then 'UNKNOWN NAME' else FirstName end AS FirstName from DemoTable;
ผลลัพธ์
+--------------+ | FirstName | +--------------+ | John | | UNKNOWN NAME | | Adam | | UNKNOWN NAME | +--------------+ 4 rows in set (0.00 sec)
วิธีสั้นกว่า: IFNULL()
mysql> select IFNULL(FirstName, 'UNKNOWN NAME') AS FirstName from DemoTable;
ผลลัพธ์ (เหมือนกัน)
+--------------+ | FirstName | +--------------+ | John | | UNKNOWN NAME | | Adam | | UNKNOWN NAME | +--------------+ 4 rows in set (0.00 sec)
เปรียบเทียบ CASE WHEN vs IFNULL vs COALESCE
| ฟังก์ชัน | รองรับอาร์กิวเมนต์ | Standard | ใช้เมื่อไหร่ |
|---|---|---|---|
| CASE WHEN | หลายเงื่อนไข | ANSI | Logic ซับซ้อน |
| IFNULL | 2 ตัว | MySQL | แทนที่ NULL เดียว |
| COALESCE | หลายตัว | ANSI | เลือกค่า Non-NULL แรก |
COALESCE ตัวอย่าง
SELECT COALESCE(FirstName, NickName, 'UNKNOWN NAME') FROM DemoTable;
ลอง FirstName → NickName → 'UNKNOWN NAME' ตามลำดับ