สถานการณ์
คอลัมน์ FirstName มีค่าว่าง ('') ต้องการแสดง 'Not Applicable' แทนค่าว่าง
วิธีแก้: ใช้ IF() Function
IF(condition, true_value, false_value) - เรียบง่ายกว่า CASE WHEN สำหรับเงื่อนไข 2 ทางเลือก
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
-> FirstName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.77 sec)
2. เพิ่มข้อมูล (มีค่าว่าง)
mysql> INSERT INTO DemoTable VALUES('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('David');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('');
Query OK, 1 row affected (0.13 sec)
3. แสดงข้อมูลต้นฉบับ
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+ | FirstName | +-----------+ | Chris | | | | David | | Bob | | | +-----------+ 5 rows in set (0.00 sec)
4. ใช้ IF() แสดงข้อความแทนค่าว่าง
mysql> SELECT IF(FirstName = '', 'Not Applicable', FirstName) AS Status FROM DemoTable;
ผลลัพธ์:
+----------------+ | Status | +----------------+ | Chris | | Not Applicable | | David | | Bob | | Not Applicable | +----------------+ 5 rows in set (0.00 sec)
IF() vs CASE WHEN vs COALESCE/NULLIF
| วิธี | Syntax | จัดการ NULL | จัดการ Empty String | เหมาะสำหรับ |
|---|---|---|---|---|
| IF() | IF(cond, true, false) | ต้อง IFNULL ก่อน | ตรวจสอบได้โดยตรง | เงื่อนไขง่าย 2 ทางเลือก |
| CASE WHEN | CASE WHEN ... THEN ... ELSE ... END | ต้อง IFNULL ก่อน | ตรวจสอบได้โดยตรง | หลายเงื่อนไข / Complex Logic |
| COALESCE | COALESCE(val1, val2, ...) | คืนค่า Non-NULL แรก | ไม่จัดการ (Empty ≠ NULL) | Fallback Chain |
| NULLIF + COALESCE | COALESCE(NULLIF(TRIM(val), ''), 'default') | จัดการได้ | จัดการได้ (ผ่าน TRIM+NULLIF) | Eleganter สำหรับ Default Value |
จัดการ NULL และ Empty String พร้อมกัน
-- IF Version SELECT IF(TRIM(IFNULL(FirstName, '')) = '', 'Not Applicable', FirstName) AS Status FROM DemoTable; -- COALESCE + NULLIF Version (แนะนำ) SELECT COALESCE(NULLIF(TRIM(FirstName), ''), 'Not Applicable') AS Status FROM DemoTable;
กรณีการใช้งานจริง
- Profile Page: แสดง 'Not Set' แทนช่องว่าง
- Report: แสดง 'N/A' สำหรับ Missing Data
- Export CSV: ให้ค่าคงที่แทน Empty Cell
- API Response: Default Value สำหรับ Optional Fields