it-swarm.com.de

MySQL sucht nach Text in einem Feld und ersetzt diesen

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

Das heißt Suchen Sie nach foo und ersetzen Sie sie durch bar, sodass ein Datensatz mit einem Feld mit dem Wert hello foohello bar wird.

231
julz

Ändern Sie table_name und field entsprechend Ihrem Tabellennamen und dem betreffenden Feld:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
443
Joe Skora
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
79
thesmallprint
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Wenn ich beispielsweise alle Vorkommen von John durch Mark ersetzen möchte, verwende ich unten: 

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

Und wenn Sie basierend auf dem Wert eines anderen Feldes suchen und ersetzen möchten, können Sie ein CONCAT ausführen:

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

Nur um dieses hier zu haben, damit andere es sofort finden werden.

5
basdog22

Die Funktion Replace string erledigt dies.

1
Wayne

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

0
Schwann

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 WHERE-Klausel ist insgesamt am langsamsten.

0
Gaspy