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

อัปเดตเฉพาะเซลล์ว่าง (Empty String) ให้เป็น NULL ด้วย NULLIF() ใน MySQL

ปัญหา

การ 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 = '' → เท่ากับ '' → คืน NULL
  • Name = 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 ได้ในคำสั่งเดียว สั้น กระชับ และอ่านง่าย