ใช้ฟังก์ชัน IF() ร่วมกับ IS NOT NULL เพื่อคืนค่า 1 เมื่อคอลัมน์ไม่ใช่ NULL และ 0 เมื่อเป็น NULL
Syntax
SELECT IF(column_name IS NOT NULL, 1, 0) AS result FROM table_name;
ตัวอย่างการใช้งาน
1. ทดสอบค่าคงที่
mysql> select if('' is not NULL, 1, 0);
ผลลัพธ์: 1 (สตริงว่าง '' ไม่ใช่ NULL)
2. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1915 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1915 values('Chris'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1915 values(''); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1915 values('David'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1915 values(NULL); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1915;
+-------+ | Name | +-------+ | Chris | | | | David | | NULL | +-------+ 4 rows in set (0.00 sec)
3. ใช้ IF() ตรวจสอบ NOT NULL
mysql> select if(Name IS NOT NULL, 1, 0) as Result from DemoTable1915;
ผลลัพธ์:
+--------+ | Result | +--------+ | 1 | -- Chris (NOT NULL) | 1 | -- '' (Empty string ไม่ใช่ NULL) | 1 | -- David (NOT NULL) | 0 | -- NULL (เป็น NULL) +--------+ 4 rows in set (0.00 sec)
ข้อสังเกตสำคัญ: Empty String vs NULL
| ค่า | IS NULL | IS NOT NULL | = '' |
|---|---|---|---|
| NULL | True | False | Unknown (ไม่ใช่ True/False) |
| '' (Empty) | False | True | True |
| 'text' | False | True | False |
กรณีต้องการ: NOT NULL และไม่ใช่ Empty String
SELECT IF(Name IS NOT NULL AND Name <> '', 1, 0) FROM DemoTable1915;
ผลลัพธ์: Chris=1, ''=0, David=1, NULL=0
ฟังก์ชันทางเลือก
-- IFNULL: คืนค่า 0 ถ้า NULL, 1 ถ้าไม่ NULL (แต่ Empty String = 1) SELECT IFNULL(Name, 0) -- ไม่เหมาะ -- COALESCE: เหมือน IFNULL SELECT COALESCE(Name, 0) -- 推薦: ใช้ IF() โดยตรงเหมือนตัวอย่าง
สรุป: ใช้ IF(column IS NOT NULL, 1, 0) ได้ค่า 1 สำหรับ NOT NULL (รวม Empty String) หากต้องการ exclude Empty String ให้เพิ่ม AND column <> ''