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

หาค่าที่มีตัวอักษรพิเศษใน MySQL และแทนที่ด้วย NULL

ใช้คำสั่ง UPDATE ... SET column = NULL WHERE column = 'value' เพื่อหาค่าเฉพาะ (รวมตัวอักษรพิเศษ) และตั้งค่าเป็น NULL

Syntax

UPDATE table_name 
SET column_name = NULL 
WHERE column_name = 'target_value';

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล

mysql> create table DemoTable1914 ( 
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> Code varchar(20) 
    -> ) AUTO_INCREMENT=1001; Query OK, 0 rows affected (0.00 sec)

mysql> insert into DemoTable1914(Code) values('John101'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1914(Code) values('234David'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1914(Code) values('100_Mike'); Query OK, 1 row affected (0.00 sec)

ข้อมูลทั้งหมด:

mysql> select * from DemoTable1914;
+------+----------+
| Id   | Code     |
+------+----------+
| 1001 | John101  |
| 1002 | 234David |
| 1003 | 100_Mike |
+------+----------+
3 rows in set (0.00 sec)

2. หา Code = '100_Mike' และตั้งค่า NULL

mysql> update DemoTable1914 set Code = NULL where Code = '100_Mike';
Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0

3. ตรวจสอบผลลัพธ์

mysql> select * from DemoTable1914;
+------+----------+
| Id   | Code     |
+------+----------+
| 1001 | John101  |
| 1002 | 234David |
| 1003 | NULL     |
+------+----------+
3 rows in set (0.00 sec)

ขยาย: หาด้วย Pattern (LIKE/REGEXP) แล้วตั้งค่า NULL

-- หา Code ที่มี Underscore
UPDATE DemoTable1914 SET Code = NULL WHERE Code LIKE '%_%';

-- หา Code ที่มีตัวเลข
UPDATE DemoTable1914 SET Code = NULL WHERE Code REGEXP '[0-9]';

-- หา Code เริ่มต้นด้วยตัวเลข
UPDATE DemoTable1914 SET Code = NULL WHERE Code REGEXP '^[0-9]';

คำสั่งที่เกี่ยวข้อง

คำสั่งใช้เมื่อ
SET col = NULLล้างค่าเป็น NULL
SET col = ''ล้างค่าเป็น Empty String
WHERE col IS NULLหาแถวที่เป็น NULL
WHERE col = ''หาแถวที่เป็น Empty String

⚠️ หมายเหตุ: NULL และ '' (Empty String) ต่างกันใน SQL:

  • NULL = ไม่มีค่า (Unknown)
  • '' = มีค่าแต่เป็นสตริงว่าง
  • COUNT(col) นับเฉพาะ NOT NULL, COUNT(*) นับทุกแถว

สรุป: ใช้ UPDATE ... SET column = NULL WHERE column = 'exact_value' เพื่อแทนที่ค่าเฉพาะ (รวม Special Char) ด้วย NULL สำหรับ Pattern Matching ใช้ LIKE หรือ REGEXP ใน WHERE