Bagaimana saya bisa menggunakan mySQL replace () untuk mengganti string di banyak rekaman?


166

Kami memiliki database yang memiliki banyak catatan dengan beberapa data buruk dalam satu kolom, di mana editor yang disematkan melarikan diri dari beberapa hal yang seharusnya tidak diloloskan dan itu memecah tautan yang dihasilkan.

Saya ingin menjalankan kueri untuk mengganti karakter buruk di semua catatan, tetapi tidak tahu cara melakukannya. Saya menemukan satu replace()fungsi di MySQL, tapi bagaimana saya bisa menggunakannya di dalam query?

Sebagai contoh, apa yang akan menjadi sintaks yang benar jika saya ingin mengganti string &lt;dengan braket sudut kurang nyata ( <) di semua catatan yang ada &lt;di articleItemkolom? Bisakah itu dilakukan dalam satu permintaan (yaitu memilih dan mengganti semua dalam satu gerakan), atau apakah saya harus melakukan beberapa pertanyaan? Bahkan jika itu adalah beberapa kueri, bagaimana saya menggunakan replace()untuk mengganti nilai bidang pada lebih dari satu catatan?


5
sebelum Anda melakukan apa pun pastikan Anda membuat cadangan database juga. Anda juga akan menggunakan pembaruan untuk memperbarui bidang apa pun.
Matt


Jawaban:


395

Pada tingkat yang sangat umum

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

Dalam kasus Anda, Anda mengatakan ini lolos tetapi karena Anda tidak menentukan bagaimana melarikan diri, katakanlah mereka melarikan diri ke GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

Karena kueri Anda benar-benar akan berfungsi di dalam string, WHEREklausa Anda melakukan pencocokan pola tidak mungkin untuk meningkatkan kinerja apa pun - itu sebenarnya akan menghasilkan lebih banyak pekerjaan untuk server. Kecuali jika Anda memiliki anggota klausa WHERE lain yang akan membuat kueri ini berkinerja lebih baik, Anda bisa melakukan pembaruan seperti ini:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

Anda juga dapat membuat sarang beberapa REPLACEpanggilan

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

Anda juga dapat melakukan ini saat memilih data (yang bertentangan dengan saat Anda menyimpannya).

Jadi alih-alih:

SELECT MyURLString From MyTable

Anda bisa melakukannya

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable


7
berdalih minor: GREATERTHAN is '>'
Olivier Dulac

23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

Memperbaiki &lt;s. Anda perlu menggunakan penyandian &, seperti: &amp;:)
Dan J

Saya mengeditnya kembali. Terima kasih telah memberi tahu saya. Saya sadar beberapa saat setelah saya mengatakan saya tidak tahu caranya. Itulah cara duniaku bekerja. :)
simshaun

6

Periksa ini

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

Misalnya dengan string sampel:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

EG dengan Nama Kolom / Bidang:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')

4

Anda dapat menulis prosedur tersimpan seperti ini:

CREATE PROCEDURE sanitize_ TABLE ()

MULAI

# Ganti ruang dengan garis bawah

PEMBARUAN Tabel SET FieldName = REPLACE ( FieldName , "", "_") WHERE FieldName bukan NULL;

#delete dot

PEMBARUAN Tabel SET FieldName = REPLACE ( FieldName , ".", "") WHERE FieldName bukan NULL;

#menghapus (

PEMBARUAN Tabel SET FieldName = REPLACE ( FieldName , "(", "") WHERE FieldName bukan NULL;

#menghapus )

PEMBARUAN Tabel SET FieldName = REPLACE ( FieldName , ")", "") WHERE FieldName bukan NULL;

#raplace atau hapus char yang kamu inginkan

# ..........................

AKHIR

Dengan cara ini Anda memiliki kontrol termodulasi atas tabel.

Anda juga dapat menggeneralisasi prosedur tersimpan membuatnya, parametrik dengan tabel untuk membersihkan parameter input


1
cek kosong itu mubazir
kiedysktos

Apakah ada alat yang mudah dan aman untuk membuat prosedur tersimpan mysql?
Ivan Slaughter

0

Ini akan membantu Anda.

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

Hasil:

title = Elmer's Parade
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.