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

การ Find และ Replace เส้นทางไฟล์ในคอลัมน์ MySQL ด้วย REPLACE()

ใช้ REPLACE() เพื่อหาและแทนที่ส่วนของเส้นทางไฟล์ในคอลัมน์

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    FolderLocation text ); 
Query OK, 0 rows affected (0.80 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values('C/ProgramFiles/AllMySQLProgram'); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('C/ProgramFiles/JavaChatApplication'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('C/ProgramFiles/Main/Image.png'); Query OK, 1 row affected (0.18 sec)

แสดงข้อมูลก่อนเปลี่ยน

mysql> select *from DemoTable;
+------------------------------------+
| FolderLocation                     |
+------------------------------------+
| C/ProgramFiles/AllMySQLProgram     |
| C/ProgramFiles/JavaChatApplication |
| C/ProgramFiles/Main/Image.png      |
+------------------------------------+
3 rows in set (0.00 sec)

คิวรี่ Find และ Replace

mysql> update DemoTable 
    set FolderLocation=replace(FolderLocation,'C/ProgramFiles','E/MyFolder/Details'); 
Query OK, 3 rows affected (0.14 sec)
Rows matched: 3  Changed: 3  Warnings: 0

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

mysql> select *from DemoTable;
+----------------------------------------+
| FolderLocation                         |
+----------------------------------------+
| E/MyFolder/Details/AllMySQLProgram     |
| E/MyFolder/Details/JavaChatApplication |
| E/MyFolder/Details/Main/Image.png      |
+----------------------------------------+
3 rows in set (0.00 sec)

คำอธิบาย REPLACE()

  • REPLACE(str, from_str, to_str) - แทนที่ ทุกครั้ง ที่พบ from_str ด้วย to_str
  • Case-sensitive (ขึ้นกับ Collation)
  • คืนค่า String ใหม่ ไม่เปลี่ยนข้อมูลต้นฉบับ (ต้อง UPDATE)

ข้อควรระวัง

  • ไม่ใช้ Index ได้ - Full table scan
  • Partial match: 'C/ProgramFilesX' ก็จะถูกแทนที่ด้วย → 'E/MyFolder/DetailsX'
  • Backup ก่อน UPDATE จำนวนมาก

แนวทางแก้ไข Precision

-- แทนที่เฉพาะ Path เริ่มต้น (มี / ต่อท้าย)
UPDATE DemoTable 
SET FolderLocation = REPLACE(FolderLocation, 'C/ProgramFiles/', 'E/MyFolder/Details/')
WHERE FolderLocation LIKE 'C/ProgramFiles/%';

หลายครั้ง (Nested REPLACE)

UPDATE DemoTable 
SET FolderLocation = REPLACE(REPLACE(FolderLocation, 'old1', 'new1'), 'old2', 'new2');

MySQL 8.0+: REGEXP_REPLACE

UPDATE DemoTable 
SET FolderLocation = REGEXP_REPLACE(FolderLocation, '^C/ProgramFiles', 'E/MyFolder/Details');