แบบสอบถาม MySQL ใดที่จะทำการค้นหาข้อความและแทนที่ในฟิลด์ใดฟิลด์หนึ่งในตาราง
คือค้นหาfooและแทนที่ด้วยbarเพื่อบันทึกข้อมูลที่มีค่าที่จะกลายเป็นhello foohello bar
แบบสอบถาม MySQL ใดที่จะทำการค้นหาข้อความและแทนที่ในฟิลด์ใดฟิลด์หนึ่งในตาราง
คือค้นหาfooและแทนที่ด้วยbarเพื่อบันทึกข้อมูลที่มีค่าที่จะกลายเป็นhello foohello 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");