ฉันกำลังค้นหาสตริงที่แน่นอนในเขตข้อมูลและต้องการแทนที่ด้วยสตริงใหม่ โดยเฉพาะฉันต้องการให้การอ้างอิงทั้งหมดไปยัง URL หนึ่งเปลี่ยนเป็น URL อื่น ฉันได้สร้างคำสั่ง SQL นี้ขึ้นและกำลังเรียกใช้งานที่mysql>
พรอมต์ของ CentOS 5.5 โดยใช้ MySQL Community Server 5.1.54
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
คำตอบคือ:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
ฉันจะติดตามสาเหตุที่ไม่มีการเปลี่ยนแปลงได้อย่างไร
แก้ไข 1:
ขอบคุณ Aaron Bertrand ฉันค้นพบว่าREPLACE()
ไม่สามารถจัดการสัญลักษณ์แทนได้และฉันใช้ผิดทั้งหมด (คิดว่า: WHERE
clause หายไป) นี่คือคำแถลงการปฏิรูปของฉัน:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
ที่ฉันได้รับเก่าคุ้นเคย:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
ฉันทำอะไรผิดได้
แก้ไข 2:
ฉันจะบอกสิ่งที่ฉันทำผิด !! ฉันไม่ได้ตั้งสมมติฐาน ข้อสันนิษฐานของฉันคือสตริงที่ฉันแทนที่อยู่ในตัวพิมพ์เล็กทั้งหมด LIKE %companydomain.com%
ข้อที่กำลังจะกลับทุกสิ่งที่ดู ซึ่งรวมถึงการเปลี่ยนรูปแบบตัวพิมพ์ใหญ่ทั้งหมดเช่น CompanyDomain.com, CoMpAnYdOmAiN.com และอื่น ๆ
ส่งผ่านสิ่งนั้นไปREPLACE()
หา companydomain.com อย่างเคร่งครัดเพื่อแทนที่มันด้วย companydomain.org
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
แน่นอนว่าบันทึกของฉันถูกส่งคืน แต่ไม่มีอะไรถูกแทนที่ เมื่อฉันเปลี่ยนREPLACE()
ให้คำนึงถึงการใช้อักษรตัวพิมพ์ใหญ่แล้วบันทึกทั้งหมดจะได้รับการอัปเดตและปรากฏว่าทุกอย่างเป็นไปด้วยดี REPLACE()
ไวยากรณ์ที่ถูกต้องสำหรับสถานการณ์ของฉันจึง:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )