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

แทนที่อักขระพิเศษในคอลัมน์ด้วย REPLACE() ใน MySQL


สถานการณ์

คอลัมน์ StudentCode มีค่า '______' ต้องการแทนที่เป็น 'Mike_007'

วิธีแก้: ใช้ REPLACE() ใน UPDATE

REPLACE(str, from_str, to_str) แทนที่ทุกครั้งที่พบ from_str ด้วย to_str

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

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1574 (
    -> StudentCode VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.59 sec)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable1574 VALUES('111_Carol');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1574 VALUES('______');
Query OK, 1 row affected (0.30 sec)
mysql> INSERT INTO DemoTable1574 VALUES('David_12345');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1574 VALUES('______');
Query OK, 1 row affected (0.12 sec)

3. แสดงข้อมูลก่อน

mysql> SELECT * FROM DemoTable1574;

ผลลัพธ์:

+-------------+
| StudentCode |
+-------------+
| 111_Carol   |
| ______      |
| David_12345 |
| ______      |
+-------------+
4 rows in set (0.00 sec)

4. แทนที่ '______' → 'Mike_007'

mysql> UPDATE DemoTable1574 SET StudentCode = REPLACE(StudentCode, '______', 'Mike_007');
Query OK, 2 rows affected (0.38 sec)
Rows matched: 4 Changed: 2 Warnings: 0

5. ตรวจสอบหลังแทนที่

mysql> SELECT * FROM DemoTable1574;

ผลลัพธ์:

+-------------+
| StudentCode |
+-------------+
| 111_Carol   |
| Mike_007    |
| David_12345 |
| Mike_007    |
+-------------+
4 rows in set (0.00 sec)

REPLACE() Characteristics

  • Case-sensitive (ขึ้นกับ Collation)
  • แทนที่ ทุก Occurrence ใน String
  • หาไม่เจอ → คืนค่า String เดิม (ไม่ Error)
  • NULL Input → คืนค่า NULL

ตัวอย่างเพิ่มเติม

แทนที่หลายครั้ง (Nested REPLACE)

UPDATE Table SET Col = REPLACE(REPLACE(Col, 'old1', 'new1'), 'old2', 'new2');

แทนที่เฉพาะคำเต็ม (Word Boundary) - ใช้ REGEXP_REPLACE (MySQL 8.0+)

UPDATE Table SET Col = REGEXP_REPLACE(Col, '[[:<:]]old[[:>:]]', 'new');

Performance & Best Practices

  • UPDATE ทั้งตาราง → Full Table Scan + Lock ทุกแถว
  • เพิ่ม WHERE: WHERE StudentCode = '______' ลด Rows Matched
  • Batch Update: LIMIT 1000 ใน Loop (Application Side)
  • Backup ก่อน Update Production

กรณีการใช้งานจริง

  • Data Cleaning: แทนที่ Placeholder ('______', 'N/A', 'NULL')
  • Migration: แทนที่ Legacy Code/Format
  • PII Masking: แทนที่ Email/Phone ด้วย Mask
  • SEO: แทนที่ Special Characters ใน URL Slug