MySQL mencari dan mengganti beberapa teks dalam suatu bidang


257

Apa permintaan MySQL yang akan melakukan pencarian dan penggantian teks dalam satu bidang tertentu dalam sebuah tabel?

Yaitu mencari foodan mengganti dengan barbegitu catatan dengan bidang dengan nilai hello foomenjadi hello bar.

Jawaban:


490

Ubah table_namedan fielduntuk mencocokkan nama tabel dan bidang Anda dalam pertanyaan:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;

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

6
Saya pikir lebih cepat tidak menggunakan WHERE instr(field, 'foo') > 0;(jadi tidak akan melakukan 2 pencarian) ... Apakah saya salah?
inemanja

2
@treddell, tidak ada posisi mulai dari 1 di string SQL.
Alexis Wilke

2
@inemanja, @Air tanpa WHEREklausa yang Anda lakukan UPDATEpada semua baris ...
Alexis Wilke

7
Seperti Pring, jika Anda akan meninggalkan komentar seperti itu, Anda mungkin ingin menjelaskan alasannya. Apakah itu kesalahan dalam saran awal, atau kesalahan di pihak Anda? Dan Anda tahu bahwa sebelum Anda melakukan perubahan besar pada database Anda harus mendukungnya terlebih dahulu?
pdwalker

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

2
Membantuku. Untuk semua noobs, harap hapus tanda kurung siku.
Anantha Raju C

8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Seperti misalnya, jika saya ingin mengganti semua kemunculan John dengan Mark, saya akan menggunakan di bawah ini,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');

6

Dan jika Anda ingin mencari dan mengganti berdasarkan nilai bidang lain Anda bisa melakukan CONCAT:

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

Hanya untuk memiliki yang ini di sini sehingga orang lain akan menemukannya sekaligus.



4

Dalam pengalaman saya, metode tercepat adalah

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

The INSTR()cara adalah tercepat kedua dan menghilangkan WHEREklausul sama sekali adalah yang paling lambat, bahkan jika kolom tidak diindeks.


Bekerja untuk saya karena saya perlu menambahkan klausa lain di mana. UPDATE table_name SET field = REPLACE (bidang, 'foo', 'bar') MANA bidang SEPERTI '% foo%' DAN otherfield = 'foo22'
Maks.

1

Fungsi Ganti string akan melakukan itu.


Bekerja untukku. Itu tergantung pada bagaimana Anda menafsirkan pertanyaan itu. Jika Anda membutuhkan entri basis data untuk diubah, maka gunakan update. Kalau tidak, solusi ini jauh lebih baik karena dapat digunakan tanpa memperbarui bidang.
Gruber

0

Saya menggunakan baris perintah di atas sebagai berikut: perbarui TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); tujuannya adalah untuk mengganti Dan dengan dan ("A" harus huruf kecil). Masalahnya adalah ia tidak dapat menemukan "Dan" dalam database, tetapi jika saya menggunakan seperti "% Dan%" maka ia dapat menemukannya bersama dengan banyak ands lainnya yang merupakan bagian dari kata atau bahkan yang sudah huruf kecil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.