Birden çok kayıttaki dizeleri değiştirmek için mySQL replace () yöntemini nasıl kullanabilirim?


166

Gömülü bir düzenleyicinin kaçmaması gereken bazı şeylerden kaçtığı ve oluşturulan bağlantıları bozduğu bir sütunda bazı kötü veriler içeren bir sürü kayıt içeren bir veritabanımız var.

Tüm kayıtlarda bozuk karakterleri değiştirmek için bir sorgu çalıştırmak istiyorum, ancak nasıl yapılacağını anlayamıyorum. Bulduğum işlevini MySQL, ama bir sorguya içine nasıl kullanabilirim?replace()

Ben dizesini değiştirmek isterse Örneğin, neyi doğru sözdizimi olurdu &lt;gerçek bir az daha köşebent (ile <olan tüm kayıtlarda) &lt;içinde articleItemkolona? Tek bir sorguda yapılabilir (yani tümünü tek bir geçişte seçin ve değiştirin) veya birden fazla sorgu yapmak zorunda mıyım? Birden çok sorgu olsa bile replace(), birden fazla kayıtta bir alanın değerini değiştirmek için nasıl kullanabilirim ?


5
bir şey yapmadan önce veritabanını da yedeklediğinizden emin olun. Herhangi bir alanı güncellemek için güncellemeyi de kullanabilirsiniz.
Matt


Yanıtlar:


395

Çok genel düzeyde

UPDATE MyTable

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

WHERE SomeOtherColumn LIKE '%PATTERN%'

Sizin durumunuzda bunların kaçtığını söylüyorsunuz, ancak nasıl kaçtıklarını belirtmediğiniz için, diyelim ki kaçtılar GREATERTHAN

UPDATE MyTable

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

WHERE articleItem LIKE '%GREATERTHAN%'

Sorgunuz aslında dizenin içinde çalışacağından WHERE, desen eşleştirmesini yapan cümlenizin herhangi bir performansı iyileştirmesi olası değildir - aslında sunucu için daha fazla iş üretecektir. Bu sorgunun daha iyi performans göstermesini sağlayacak başka bir WHERE yan tümcesi üyesi yoksa, aşağıdaki gibi bir güncelleştirme yapabilirsiniz:

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

Ayrıca birden fazla REPLACEçağrıyı da iç içe yerleştirebilirsiniz

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

Bunu, verileri seçtiğinizde de (kaydettiğinizde değil) yapabilirsiniz.

Bunun yerine:

SELECT MyURLString From MyTable

Yapabilirsin

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


7
küçük kelime oyunu: GREATERTHAN '>'
Olivier Dulac

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

Sabitlenmiş &lt;s. & Gibi kodlamayı kullanmanız gerekir: &amp;:)
Dan J

Yeniden düzenledim. Bilmeme izin verdiğin için teşekkürler. Nasıl olduğunu bilmediğimi söyledikten sonra anlarımda şaşkına döndü. Bu benim dünyamın çalışma şekli. :)
simshaun

6

Şuna göz at

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

Örnek dize ile:

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

Sütun / Alan Adı ile EG:

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

4

bunun gibi bir saklı yordam yazabilirsiniz:

PROSEDÜR OLUŞTUR sanitize_ TABLO ()

BAŞLA

#replace ile alt çizgi

GÜNCELLEME Tablo SETİ FieldName = REPLACE ( FieldName , "", "_") FieldName NULL değil;

#delete dot

GÜNCELLE Tablo SETİ FieldName = REPLACE ( FieldName , ".", "") FieldName NULL değil;

#delete (

GÜNCELLEME Tablo SETİ FieldName = REPLACE ( FieldName , "(", "") FieldName NULL değil;

#delete)

GÜNCELLE Tablo SETİ FieldName = REPLACE ( FieldName , ")", "") FieldName NULL değil;

#raplace veya istediğiniz herhangi bir karakteri silin

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

SON

Bu şekilde masa üzerinde modüler kontrolünüz olur.

Ayrıca, saklı yordamı genelleştirerek giriş parametresini sanitoze etmek için tablo ile parametrik yapabilirsiniz.


1
bu boş çekler gereksizdir
kiedysktos

Mysql saklı yordamı oluşturmak için kolay ve güvenli araçlar var mı?
Ivan Slaughter

0

Bu sana yardım edecek.

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

Sonuç:

title = Elmer's Parade
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.