แบบสอบถาม MySQL ใดที่จะทำการค้นหาข้อความและแทนที่ในฟิลด์ใดฟิลด์หนึ่งในตาราง
คือค้นหาfoo
และแทนที่ด้วยbar
เพื่อบันทึกข้อมูลที่มีค่าที่จะกลายเป็นhello foo
hello bar
แบบสอบถาม MySQL ใดที่จะทำการค้นหาข้อความและแทนที่ในฟิลด์ใดฟิลด์หนึ่งในตาราง
คือค้นหาfoo
และแทนที่ด้วยbar
เพื่อบันทึกข้อมูลที่มีค่าที่จะกลายเป็นhello foo
hello bar
คำตอบ:
เปลี่ยนtable_name
และfield
จับคู่ชื่อตารางและฟิลด์ที่เป็นปัญหา:
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
WHERE instr(field, 'foo') > 0;
(ดังนั้นจะไม่ทำการค้นหา 2 ครั้ง) ... ฉันผิดหรือเปล่า?
WHERE
ข้อที่คุณทำUPDATE
ในทุกแถว ...
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
เช่นถ้าฉันต้องการแทนที่ John ทั้งหมดด้วย Mark ฉันจะใช้ด้านล่าง
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
และถ้าคุณต้องการค้นหาและแทนที่ตามค่าของฟิลด์อื่นคุณสามารถทำ CONCAT:
update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
เพียงแค่มีอันนี้ที่นี่เพื่อให้คนอื่นจะพบได้ในครั้งเดียว
จากประสบการณ์ของฉันวิธีที่เร็วที่สุดคือ
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';
INSTR()
วิธีเป็นครั้งที่สองที่เร็วที่สุดและถนัดWHERE
ประโยคทั้งหมดเป็นที่ช้าที่สุดแม้ว่าคอลัมน์จะไม่จัดทำดัชนี
ฉันใช้บรรทัดคำสั่งด้านบนดังนี้ปรับปรุงตารางชื่อตั้ง FIELD = แทนที่ (FIELD, 'และ', 'และ'); วัตถุประสงค์คือเพื่อแทนที่และด้วยและ ("A" ควรเป็นตัวพิมพ์เล็ก) ปัญหาคือมันไม่สามารถหา "และ" ในฐานข้อมูล แต่ถ้าฉันใช้เช่น "% และ%" ก็สามารถค้นหาได้พร้อมกับอื่น ๆ อีกมากมายและเป็นส่วนหนึ่งของคำหรือแม้แต่คนที่มีตัวพิมพ์เล็กอยู่แล้ว
[field_name]
, "foo", "bar");