การตรวจสอบ Empty String และ NULL แยกกันด้วย CASE
ใน MySQL NULL และ '' (empty string) เป็นสิ่งต่างกัน ต้องตรวจสอบแยกกันด้วย IS NULL และ = ''
ไวยากรณ์
SELECT *,
CASE
WHEN yourColumn = '' THEN 'Empty String'
WHEN yourColumn IS NULL THEN 'NULL Value'
ELSE CONCAT(yourColumn, ' is a Value')
END AS status
FROM yourTableName;
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE checkFieldDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
PRIMARY KEY(Id)
);
เพิ่มข้อมูล (ผสม NULL, Empty, Normal):
INSERT INTO checkFieldDemo(Name) VALUES(NULL);
INSERT INTO checkFieldDemo(Name) VALUES('John');
INSERT INTO checkFieldDemo(Name) VALUES(NULL);
INSERT INTO checkFieldDemo(Name) VALUES('');
INSERT INTO checkFieldDemo(Name) VALUES('Carol');
INSERT INTO checkFieldDemo(Name) VALUES('');
INSERT INTO checkFieldDemo(Name) VALUES(NULL);
ตรวจสอบด้วย CASE:
SELECT *,
CASE
WHEN Name = '' THEN 'It is an empty string'
WHEN Name IS NULL THEN 'It is a NULL value'
ELSE CONCAT(Name, ' is a Name')
END AS ListOfValues
FROM checkFieldDemo;
ผลลัพธ์:
+----+-------+-----------------------+
| Id | Name | ListOfValues |
+----+-------+-----------------------+
| 1 | NULL | It is a NULL value |
| 2 | John | John is a Name |
| 3 | NULL | It is a NULL value |
| 4 | | It is an empty string |
| 5 | Carol | Carol is a Name |
| 6 | | It is an empty string |
| 7 | NULL | It is a NULL value |
+----+-------+-----------------------+
ข้อผิดพลาดที่พบบ่อย
-- ❌ ผิด: WHERE name = NULL (ไม่ทำงาน)
-- ❌ ผิด: WHERE name <> 'value' (ไม่จับ NULL ได้)
-- ✅ ถูกต้อง:
WHERE name IS NULL
WHERE name IS NOT NULL
WHERE name = ''
WHERE name <> ''
ฟังก์ชันช่วยตรวจสอบ
| ฟังก์ชัน | คืนค่า | ตัวอย่าง |
|---|---|---|
| IS NULL | TRUE/FALSE | col IS NULL |
| IS NOT NULL | TRUE/FALSE | col IS NOT NULL |
| IFNULL(col, val) | val หาก NULL | IFNULL(name, 'Unknown') |
| COALESCE(col1, col2, ...) | ค่าแรกที่ไม่ NULL | COALESCE(name, 'Unknown') |
| NULLIF(col, val) | NULL หาก col=val | NULLIF(name, '') -- empty->NULL |
การนับ NULL และ Empty
SELECT
COUNT(*) AS total,
SUM(CASE WHEN Name IS NULL THEN 1 ELSE 0 END) AS null_count,
SUM(CASE WHEN Name = '' THEN 1 ELSE 0 END) AS empty_count,
SUM(CASE WHEN Name IS NOT NULL AND Name <> '' THEN 1 ELSE 0 END) AS valid_count
FROM checkFieldDemo;