สถานการณ์
คอลัมน์ Name มีค่าว่าง (Empty String '') ต้องการแสดงข้อความกำหนดเอง (เช่น 'Carol Taylor') แทนค่าว่าง
วิธีแก้: ใช้ CASE WHEN + TRIM + IFNULL
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.62 sec)
2. เพิ่มข้อมูล (มีค่าว่าง)
mysql> INSERT INTO DemoTable VALUES('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES(''); -- Empty String
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('David');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES(''); -- Empty String
Query OK, 1 row affected (0.11 sec)
3. แสดงข้อมูลต้นฉบับ
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+ | Name | +-------+ | Chris | | | | David | | | +-------+ 4 rows in set (0.00 sec)
4. ใช้ CASE WHEN แทนค่าว่าง
mysql> SELECT CASE TRIM(IFNULL(Name, ''))
-> WHEN '' THEN 'Carol Taylor'
-> ELSE Name
-> END AS Name
-> FROM DemoTable;
ผลลัพธ์:
+--------------+ | Name | +--------------+ | Chris | | Carol Taylor | | David | | Carol Taylor | +--------------+ 4 rows in set (0.03 sec)
อธิบาย Logic
IFNULL(Name, '')- แปลง NULL เป็น Empty String (กัน Error ใน TRIM)TRIM(...)- ตัด Space นำ/ท้าย (จัดการ ' ' ให้เป็น '')CASE WHEN '' THEN 'Carol Taylor' ELSE Name END- ถ้าหลัง Trim เป็น Empty ให้แสดง Carol Taylor
วิธีอื่นๆ ที่สั้นกว่า
1. ใช้ IF()
SELECT IF(TRIM(IFNULL(Name, '')) = '', 'Carol Taylor', Name) AS Name FROM DemoTable;
2. ใช้ COALESCE + NULLIF (Eleganter)
SELECT COALESCE(NULLIF(TRIM(Name), ''), 'Carol Taylor') AS Name FROM DemoTable;
Logic: TRIM → NULLIF('', '') → NULL → COALESCE(NULL, 'Carol Taylor') → 'Carol Taylor'
3. ใช้ CASE แบบ Simple (MySQL)
SELECT CASE TRIM(Name) WHEN '' THEN 'Carol Taylor' ELSE Name END FROM DemoTable;
กรณีการใช้งานจริง
- แสดง 'N/A', 'Unknown', 'Not Provided' แทนค่าว่าง
- Default Display Name: 'Guest', 'Anonymous'
- Fallback Image: 'default-avatar.png'
- Report: แสดง 'No Data' แทน NULL/Empty
ข้อควรระวัง
- TRIM() ลบ Space ทั้งหน้าและหลัง → ' ' กลายเป็น ''
- IFNULL() จำเป็นถ้าคอลัมน์อนุญาต NULL
- CASE WHEN แบบ Searched (มีเงื่อนไข) ยืดหยุ่นกว่า Simple CASE