MySQL arama ve alandaki bazı metinleri değiştirme


257

Hangi MySQL sorgusu bir tablodaki belirli bir alanda metin araması yapar ve değiştirir?

Yani arama foove değiştirme bardeğeri olan bir alana sahip bir kayıt hello fooolur hello bar.

Yanıtlar:


490

Değişim table_nameve fieldsöz konusu tablo adı ve alanı eşleştirmek için:

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

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

6
Kullanmamanın daha hızlı olduğunu düşünüyorum WHERE instr(field, 'foo') > 0;(bu yüzden 2 arama yapmaz) ... Yanlış mıyım?
inemanja

2
@treddell, SQL dizelerinde 1 konumunda hiçbir konum başlamaz.
Alexis Wilke

2
@inemanja olmadan @Air WHEREmaddesi bir yapmak UPDATEsatırlar tümü üzerinde ...
Alexis Wilke

7
Pring gibi, böyle bir yorum bırakacaksanız, nedenini açıklamak isteyebilirsiniz. Orijinal tavsiyede bir hata mıydı yoksa sizin tarafınızdan bir hata mıydı? Ve bir veritabanında herhangi bir kapsamlı değişiklik yapmadan önce onu yedeklemeniz gerektiğini biliyor musunuz?
pdwalker

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

2
Bana yardımcı oldu. Tüm noobslar için lütfen köşeli parantezleri çıkarın.
Anantha Raju C

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

Örneğin, John'un tüm oluşumlarını Mark ile değiştirmek istersem, aşağıda kullanacağım,

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


4

Deneyimlerime göre, en hızlı yöntem

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

INSTR()Yoludur ikinci en hızlı ve atlayarak WHEREtamamen maddesini sütun endeksli olmasa bile, en yavaş olduğunu.


Benim için çalışıyor çünkü nerede başka bir madde eklemek gerekir. GÜNCELLEME tablo_ismi SET alan = DEĞİŞTİR (alan, 'foo', 'bar') WHERE alan BENZER '% foo%' VE otherfield = 'foo22'
Max

1

Değiştir dize işlevi yapacak.


Benim için çalışıyor. Soruyu nasıl yorumladığınıza bağlıdır. Değiştirmek için veritabanı girişlerine ihtiyacınız varsa kullanın update. Aksi takdirde bu çözüm, alanları güncellemeden kullanılabileceğinden çok daha iyidir.
Gruber

0

Yukarıdaki komut satırını aşağıdaki gibi kullandım: TABLE-NAME güncelleme FIELD = replace (FIELD, 'And', 've'); amaç And ile değiştirmekti ve ("A" küçük harfle yazılmalıdır). Sorun veritabanında "Ve" bulamıyor, ama "% Ve%" gibi kullanırsanız o zaman bir kelimenin parçası olan birçok and ve hatta küçük harf olanlar ile birlikte bulabilirsiniz.

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.