MySQL sucht und ersetzt Text in einem Feld


257

Welche MySQL-Abfrage führt eine Textsuche durch und ersetzt sie in einem bestimmten Feld in einer Tabelle?

Suche also nach foound ersetzen barso ein Datensatz mit einem Feld mit dem Wert hello foowird hello bar.

Antworten:


490

Ändern Sie table_nameund fieldpassen Sie Ihren Tabellennamen und das betreffende Feld an:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
  • REPLACE (Zeichenfolgenfunktionen)
  • INSTR (String-Funktionen)

79
UPDATE [Tabellenname] SET [Feldname] = REPLACE ( [field_name], "foo", "bar");
Meetai.com

6
Ich denke, es ist schneller, es nicht zu verwenden WHERE instr(field, 'foo') > 0;(es würde also keine 2 Suchvorgänge durchführen) ... irre ich mich?
Inemanja

2
@treddell, in SQL-Strings beginnen keine Positionen bei 1.
Alexis Wilke

2
@inemanja, @Air ohne die WHEREKlausel, die Sie UPDATEin allen Zeilen machen ...
Alexis Wilke

7
Wenn Sie wie Pring einen solchen Kommentar hinterlassen möchten, möchten Sie vielleicht erklären, warum. War es ein Fehler im ursprünglichen Rat oder ein Fehler von Ihrer Seite? Und Sie wissen, dass Sie, bevor Sie umfassende Änderungen an einer Datenbank vornehmen, diese zuerst sichern sollten?
pdwalker

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

2
Half mir. Bitte entfernen Sie für alle Noobs die eckigen Klammern.
Anantha Raju C

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

Wie zum Beispiel, wenn ich alle Vorkommen von John durch Mark ersetzen möchte, werde ich unten verwenden,

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


4

Nach meiner Erfahrung ist die schnellste Methode

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

Der INSTR()Weg ist der zweitschnellste und das Weglassen der WHEREKlausel insgesamt ist am langsamsten, selbst wenn die Spalte nicht indiziert ist.


Funktioniert für mich, weil ich eine weitere Klausel hinzufügen muss, wo. UPDATE Tabellenname SET Feld = REPLACE (Feld, 'foo', 'bar') WHERE Feld WIE '% foo%' UND otherfield = 'foo22'
Max

1

Die Funktion "Zeichenfolge ersetzen" übernimmt dies.


Funktioniert bei mir. Es hängt davon ab, wie Sie die Frage interpretieren. Wenn Sie die Datenbankeinträge ändern müssen, verwenden Sie update. Ansonsten ist diese Lösung viel besser, da sie ohne Aktualisierung der Felder verwendet werden kann.
Gruber

0

Ich habe die obige Befehlszeile wie folgt verwendet: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'und'); Der Zweck war, Und durch und zu ersetzen ("A" sollte Kleinbuchstaben sein). Das Problem ist, dass es das "Und" in der Datenbank nicht finden kann, aber wenn ich "% und%" verwende, kann es es zusammen mit vielen anderen Ands finden, die Teil eines Wortes sind oder sogar solche, die bereits in Kleinbuchstaben geschrieben sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.