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

วิธีแทนที่ค่าซ้ำเฉพาะรายการใน MySQL ด้วย REPLACE()

การแทนที่ค่าซ้ำในคอลัมน์ด้วยฟังก์ชัน 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