Szukaj w MySQL i zamień tekst w polu

257

Jakie zapytanie MySQL przeszuka tekst i zastąpi jedno pole w tabeli?

Poszukaj fooi zamień na bartak, aby rekord z polem o wartości hello foostał się hello bar.

Julz
źródło

Odpowiedzi:

490

Zmień table_namei, fieldaby dopasować nazwę tabeli i pole:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • REPLACE (funkcje łańcuchowe)
  • INSTR (funkcje łańcuchowe)
Joe Skora
źródło
79
AKTUALIZACJA [nazwa_tabeli] ZESTAW [nazwa_pola] = REPLACE ( [field_name], „foo”, „bar”);
Meetai.com,
6
Myślę, że szybsze jest nieużywanie WHERE instr(field, 'foo') > 0;(więc nie wykona 2 wyszukiwań) ... Czy się mylę?
inemanja
2
@treddell, brak pozycji zaczyna się od 1 w ciągach SQL.
Alexis Wilke,
2
@inemanja, @Air bez WHEREklauzuli, którą robisz we UPDATEwszystkich wierszach ...
Alexis Wilke
7
Podobnie jak Pring, jeśli chcesz zostawić taki komentarz, możesz wyjaśnić dlaczego. Czy był to błąd w oryginalnej radzie, czy błąd z twojej strony? A czy wiesz, że zanim dokonasz gruntownych zmian w bazie danych, najpierw musisz wykonać kopię zapasową?
pdwalker
86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
odcisk
źródło
2
Pomogło mi. W przypadku wszystkich noobów usuń nawiasy kwadratowe.
Anantha Raju C
8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Na przykład, jeśli chcę zastąpić wszystkie wystąpienia Johna znakiem Marka, użyję poniżej,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Umesh Patil
źródło
6

A jeśli chcesz wyszukiwać i zamieniać na podstawie wartości innego pola, możesz wykonać CONCAT:

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

Wystarczy mieć go tutaj, aby inni mogli go od razu znaleźć.

basdog22
źródło
Jeśli podajesz nazwę pola, upewnij się, że używasz odpowiedniego rodzaju cudzysłowów !
200_success
4

Z mojego doświadczenia wynika, że ​​najszybszą metodą jest

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

Druga INSTR()droga jest najszybsza, a WHEREcałkowite pominięcie klauzuli jest najwolniejsze, nawet jeśli kolumna nie jest indeksowana.

Zadyszany
źródło
Działa dla mnie, ponieważ muszę dodać kolejną klauzulę gdzie. AKTUALIZACJA nazwa_tabeli USTAW pole = WYMIANA (pole, „foo”, „pasek”) GDZIE pole PODOBNE „% foo%” ORAZ inne pole = „foo22”
maks.
1

Wymień funkcja ciąg zrobi.

Wayne
źródło
Pracuje dla mnie. To zależy od tego, jak interpretujesz pytanie. Jeśli potrzebujesz zmienić wpisy bazy danych, użyj update. W przeciwnym razie to rozwiązanie jest znacznie lepsze, ponieważ można z niego korzystać bez aktualizacji pól.
Gruber
0

Użyłem powyższego wiersza poleceń w następujący sposób: aktualizacja NAZWA TABELI ustaw FIELD = zamień (FIELD, „I”, „i”); celem było zastąpienie I przez i („A” powinno być pisane małymi literami). Problem polega na tym, że nie może znaleźć „I” w bazie danych, ale jeśli użyję np. „% And%”, może to znaleźć wraz z wieloma innymi i, które są częścią słowa, a nawet te, które są już małe.

Schwann
źródło