ปัญหา
การ UPDATE table SET col = NULL WHERE col = '' ทำงานได้ แต่ NULLIF() ทำให้สั้นกว่าและอ่านง่ายกว่า
ฟังก์ชัน NULLIF()
NULLIF(expr1, expr2)
-- คืนค่า NULL ถ้า expr1 = expr2
-- คืนค่า expr1 ถ้าไม่เท่ากัน
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล (มี Empty String)
CREATE TABLE DemoTable (Name VARCHAR(50));
INSERT INTO DemoTable VALUES ('Mike');
INSERT INTO DemoTable VALUES (''); -- Empty String
INSERT INTO DemoTable VALUES ('David');
INSERT INTO DemoTable VALUES (''); -- Empty String
INSERT INTO DemoTable VALUES ('Mike');
2. ข้อมูลก่อนอัปเดต
SELECT * FROM DemoTable;
+-------+
| Name |
+-------+
| Mike |
| | -- Empty String
| David |
| | -- Empty String
| Mike |
+-------+
3. อัปเดต Empty String → NULL ด้วย NULLIF()
UPDATE DemoTable SET Name = NULLIF(Name, '');
4. ผลลัพธ์
SELECT * FROM DemoTable;
+-------+
| Name |
+-------+
| Mike |
| NULL |
| David |
| NULL |
| Mike |
+-------+
การทำงานของ NULLIF(Name, '')
Name = 'Mike'→ ไม่เท่ากับ '' → คืน 'Mike'Name = ''→ เท่ากับ '' → คืน NULLName = NULL→ ไม่เท่ากับ '' → คืน NULL (คงเดิม)
การประยุกต์ใช้เพิ่มเติม
แปลงค่า 0 ให้เป็น NULL
UPDATE DemoTable SET Score = NULLIF(Score, 0);
แปลงค่า 'N/A' หรือ '-' ให้เป็น NULL
UPDATE DemoTable SET Value = NULLIF(Value, 'N/A');
UPDATE DemoTable SET Value = NULLIF(Value, '-');
ใน SELECT (ไม่เปลี่ยนข้อมูล จะแสดงผล)
SELECT NULLIF(Name, '') AS CleanName FROM DemoTable;
ฟังก์ชันเกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| NULLIF(expr1, expr2) | เท่ากัน → NULL, ไม่เท่ากัน → expr1 |
| IFNULL(expr1, expr2) | expr1 เป็น NULL → expr2, ไม่ใช่ → expr1 |
| COALESCE(val1, val2, ...) | คืนค่าแรกที่ไม่ใช่ NULL |
| ISNULL(expr) | เป็น NULL → 1, ไม่ใช่ → 0 |
สรุป
ใช้ NULLIF(column, '') ใน UPDATE เพื่อแปลง Empty String เป็น NULL ได้ในคำสั่งเดียว สั้น กระชับ และอ่านง่าย