การแทนที่ค่าซ้ำในคอลัมน์ด้วยฟังก์ชัน REPLACE()
ใช้ REPLACE(column, 'old_value', 'new_value') ในคำสั่ง UPDATE เพื่อเปลี่ยนค่าเฉพาะที่ต้องการในคอลัมน์
รูปแบบคำสั่ง
UPDATE table_name
SET column_name = REPLACE(column_name, 'old_value', 'new_value');
ตัวอย่าง: แทนที่ชื่อ 'Chris' เป็น 'Adam Smith' ทุกที่ที่เจอ
1. สร้างตารางและเพิ่มข้อมูล (Chris ซ้ำ 2 ครั้ง)
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50)
);
INSERT INTO DemoTable (Name) VALUES ('Chris'), ('Robert'), ('Chris'), ('David'), ('Mike');
2. ดูข้อมูลก่อน
SELECT * FROM DemoTable;
ผลลัพธ์:
+----+--------+
| Id | Name |
+----+--------+
| 1 | Chris |
| 2 | Robert |
| 3 | Chris |
| 4 | David |
| 5 | Mike |
+----+--------+
3. แทนที่ 'Chris' ด้วย 'Adam Smith'
UPDATE DemoTable SET Name = REPLACE(Name, 'Chris', 'Adam Smith');
ผลลัพธ์การรัน: Query OK, 2 rows affected (0.17 sec) Rows matched: 5 Changed: 2 Warnings: 0
4. ตรวจสอบหลังอัปเดต
SELECT * FROM DemoTable;
ผลลัพธ์:
+----+------------+
| Id | Name |
+----+------------+
| 1 | Adam Smith |
| 2 | Robert |
| 3 | Adam Smith |
| 4 | David |
| 5 | Mike |
+----+------------+
การทำงานของ REPLACE()
- แทนที่ **ทุกครั้งที่เจอ** substring 'Chris' ในคอลัมน์ Name
- หาก Name = 'Chris Chris' จะกลายเป็น 'Adam Smith Adam Smith'
- Case-sensitive (ขึ้นกับ Collation)
กรณีต้องการแทนที่เฉพาะคำเต็ม (Whole Word Only)
MySQL ไม่มี Word Boundary ใน REPLACE ต้องใช้ REGEXP หรือ Logic ซับซ้อน:
-- แทนที่เฉพาะ 'Chris' ที่เป็นคำเต็ม (ไม่ใช่ส่วนหนึ่งของคำอื่น)
UPDATE DemoTable
SET Name = CASE
WHEN Name = 'Chris' THEN 'Adam Smith'
WHEN Name LIKE 'Chris %' THEN CONCAT('Adam Smith', SUBSTRING(Name, 6))
WHEN Name LIKE '% Chris' THEN CONCAT(SUBSTRING(Name, 1, LENGTH(Name)-5), 'Adam Smith')
WHEN Name LIKE '% Chris %' THEN REPLACE(Name, ' Chris ', ' Adam Smith ')
ELSE Name
END;
ฟังก์ชัน REPLACE() ใน SELECT (ไม่เปลี่ยนข้อมูล)
SELECT Name, REPLACE(Name, 'Chris', 'Adam Smith') AS NewName FROM DemoTable;
ข้อควรระวัง
- REPLACE() ทำงานกับทุกแถว (WHERE ไม่จำเป็น แต่ควรมีเพื่อประสิทธิภาพ)
- ไม่มี WHERE = Full Table Scan
- Backup ก่อนรัน UPDATE บน Production