Wie kann ich mySQL replace () verwenden, um Zeichenfolgen in mehreren Datensätzen zu ersetzen?

165

Wir haben eine Datenbank mit einer Reihe von Datensätzen mit einigen fehlerhaften Daten in einer Spalte, in der ein eingebetteter Editor einige Dinge maskiert hat, die nicht hätten maskiert werden sollen, und generierte Links beschädigt.

Ich möchte eine Abfrage ausführen, um die fehlerhaften Zeichen in allen Datensätzen zu ersetzen, kann aber nicht herausfinden, wie das geht. Ich habe die replace()Funktion in MySQL gefunden, aber wie kann ich sie in einer Abfrage verwenden?

Was wäre beispielsweise die richtige Syntax, wenn ich die Zeichenfolge in allen Datensätzen in der Spalte &lt;durch eine tatsächliche Klammer ( <) ersetzen möchte, die kleiner als der Winkel ist ? Kann dies in einer einzigen Abfrage durchgeführt werden (dh alle auf einen Schlag auswählen und ersetzen), oder muss ich mehrere Abfragen durchführen? Wie kann ich den Wert eines Feldes in mehr als einem Datensatz ersetzen, auch wenn es sich um mehrere Abfragen handelt ?&lt;articleItemreplace()

EmmyS
quelle
5
Bevor Sie etwas tun, stellen Sie sicher, dass Sie auch die Datenbank sichern. Sie würden auch update verwenden, um ein beliebiges Feld zu aktualisieren.
Matt
1
Mögliches Duplikat von MySql - Möglichkeit, einen Teil eines Strings zu aktualisieren?
Ciro Santilli 法轮功 冠状 病 六四 事件 8
Mögliches Duplikat von MySQL suchen und Text in einem Feld ersetzen
zgormez

Antworten:

394

Auf einer sehr allgemeinen Ebene

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

In Ihrem Fall sagen Sie, dass diese entkommen sind, aber da Sie nicht angeben, wie sie entkommen sind, nehmen wir an, dass sie entkommen sind GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

Da Ihre Abfrage tatsächlich innerhalb der Zeichenfolge funktioniert, WHEREist es unwahrscheinlich , dass Ihre Klausel, die den Mustervergleich durchführt, die Leistung verbessert - sie wird tatsächlich mehr Arbeit für den Server generieren. Sofern Sie kein anderes WHERE-Klauselmitglied haben, mit dem diese Abfrage besser ausgeführt werden kann, können Sie einfach ein Update wie folgt durchführen:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

Sie können auch mehrere REPLACEAnrufe verschachteln

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

Sie können dies auch tun, wenn Sie die Daten auswählen (im Gegensatz zum Speichern).

Also statt:

SELECT MyURLString From MyTable

Du könntest es tun

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable

Raj Mehr
quelle
7
kleiner Streit: GREATERTHAN ist '>'
Olivier Dulac
23
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')
Simshaun
quelle
Das &lt;s wurde behoben . Sie müssen die Codierung von & verwenden, wie folgt: &amp;:)
Dan J
Ich habe es überarbeitet. Danke für die Information. Es dämmerte mir, als ich sagte, ich wüsste nicht wie. So funktioniert meine Welt. :)
Simshaun
6

Überprüfen Sie dies

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

ZB mit Beispielzeichenfolge:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

EG mit Spalten- / Feldname:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
Leitender Entwickler
quelle
4

Sie können eine gespeicherte Prozedur wie folgt schreiben:

VERFAHREN ERSTELLEN sanitize_ TABLE ()

START

# Leerzeichen durch Unterstrich ersetzen

UPDATE- Tabelle SET FieldName = REPLACE ( FieldName , "", "_") WHERE FieldName ist nicht NULL;

# Punkt löschen

UPDATE- Tabelle SET FieldName = REPLACE ( FieldName , ".", "") WHERE FieldName ist nicht NULL;

#delete (

UPDATE- Tabelle SET FieldName = REPLACE ( FieldName , "(", "") WHERE FieldName ist nicht NULL;

#delete)

UPDATE- Tabelle SET FieldName = REPLACE ( FieldName , ")", "") WHERE FieldName ist nicht NULL;

#Ersetzen oder löschen Sie ein beliebiges Zeichen

# ..........................

ENDE

Auf diese Weise haben Sie die Kontrolle über die Tabelle modularisiert.

Sie können die gespeicherte Prozedur auch verallgemeinern, indem Sie sie mit der Tabelle parametrisieren, um den Eingabeparameter zu bereinigen

Gianluca D'Ardia
quelle
1
Diese Nullprüfungen
Gibt es einfache und sichere Tools zum Erstellen einer gespeicherten MySQL-Prozedur?
Ivan Slaughter
0

Das wird dir helfen.

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

Ergebnis:

title = Elmer's Parade
TechyFlick
quelle