ใช้ 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');