MySQL ค้นหาและแทนที่ข้อความในฟิลด์


257

แบบสอบถาม MySQL ใดที่จะทำการค้นหาข้อความและแทนที่ในฟิลด์ใดฟิลด์หนึ่งในตาราง

คือค้นหาfooและแทนที่ด้วยbarเพื่อบันทึกข้อมูลที่มีค่าที่จะกลายเป็นhello foohello bar

คำตอบ:


490

เปลี่ยนtable_nameและfieldจับคู่ชื่อตารางและฟิลด์ที่เป็นปัญหา:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • แทนที่ (ฟังก์ชั่นสตริง)
  • INSTR (ฟังก์ชั่นสตริง)

79
UPDATE [table_name] SET [field_name] = REPLACE ( [field_name], "foo", "bar");
Meetai.com

6
ฉันคิดว่ามันเร็วกว่าที่จะไม่ใช้WHERE instr(field, 'foo') > 0;(ดังนั้นจะไม่ทำการค้นหา 2 ครั้ง) ... ฉันผิดหรือเปล่า?
inemanja

2
@treddell ไม่มีตำแหน่งเริ่มต้นที่ 1 ในสตริง SQL
Alexis Wilke

2
@inemanja, @Air โดยไม่มีWHEREข้อที่คุณทำUPDATEในทุกแถว ...
อเล็กซิส Wilke

7
เช่นเดียวกับ Pring หากคุณต้องการแสดงความคิดเห็นแบบนั้นคุณอาจต้องการอธิบายว่าทำไม มันเป็นความผิดพลาดในคำแนะนำดั้งเดิมหรือความผิดพลาดในส่วนของคุณ? และคุณรู้หรือไม่ว่าก่อนที่คุณจะทำการเปลี่ยนแปลงใด ๆ ในฐานข้อมูลคุณควรสำรองข้อมูลก่อน
pdwalker

86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');

2
ช่วยฉันด้วย สำหรับ noobs ทั้งหมดโปรดลบวงเล็บเหลี่ยมออก
Anantha Raju C

8
 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');

6

และถ้าคุณต้องการค้นหาและแทนที่ตามค่าของฟิลด์อื่นคุณสามารถทำ CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

เพียงแค่มีอันนี้ที่นี่เพื่อให้คนอื่นจะพบได้ในครั้งเดียว



4

จากประสบการณ์ของฉันวิธีที่เร็วที่สุดคือ

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

INSTR()วิธีเป็นครั้งที่สองที่เร็วที่สุดและถนัดWHEREประโยคทั้งหมดเป็นที่ช้าที่สุดแม้ว่าคอลัมน์จะไม่จัดทำดัชนี


ได้ผลสำหรับฉันเพราะฉันต้องการเพิ่มประโยคอื่นที่ UPDATE table_name SET field = REPLACE (ฟิลด์, 'foo', 'bar') ฟิลด์ไหนเช่น '% foo%' และ otherfield = 'foo22'
สูงสุด

1

เปลี่ยนฟังก์ชั่นสตริงจะทำอย่างนั้น


ใช้งานได้สำหรับฉัน ขึ้นอยู่กับว่าคุณตีความคำถามอย่างไร updateหากคุณต้องการรายการฐานข้อมูลเพื่อการเปลี่ยนแปลงแล้วใช้ มิฉะนั้นโซลูชันนี้จะดีกว่ามากเนื่องจากสามารถใช้ได้โดยไม่ต้องอัปเดตฟิลด์
กรูเบอร์

0

ฉันใช้บรรทัดคำสั่งด้านบนดังนี้ปรับปรุงตารางชื่อตั้ง FIELD = แทนที่ (FIELD, 'และ', 'และ'); วัตถุประสงค์คือเพื่อแทนที่และด้วยและ ("A" ควรเป็นตัวพิมพ์เล็ก) ปัญหาคือมันไม่สามารถหา "และ" ในฐานข้อมูล แต่ถ้าฉันใช้เช่น "% และ%" ก็สามารถค้นหาได้พร้อมกับอื่น ๆ อีกมากมายและเป็นส่วนหนึ่งของคำหรือแม้แต่คนที่มีตัวพิมพ์เล็กอยู่แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.