สถานการณ์
คอลัมน์ 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