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.

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)

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');

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');


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.