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

ใช้ CASE WHEN แสดงข้อความกำหนดเองสำหรับค่าว่างใน MySQL


สถานการณ์

คอลัมน์ 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

  1. IFNULL(Name, '') - แปลง NULL เป็น Empty String (กัน Error ใน TRIM)
  2. TRIM(...) - ตัด Space นำ/ท้าย (จัดการ ' ' ให้เป็น '')
  3. 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