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

แสดงข้อความกำหนดเองแทนคอลัมน์ว่างด้วย IF() ใน MySQL


สถานการณ์

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