Wie ersetze ich in postgresql alle Instanzen einer Zeichenfolge in einer Datenbankspalte?
Angenommen, ich möchte zum Beispiel alle Instanzen von cat
durch ersetzen dog
.
Was ist der beste Weg, dies zu tun?
postgresql
replace
Kennzeichen
quelle
quelle
Antworten:
Sie wollen PostgreSQLs verwenden ersetzen Funktion:
zum Beispiel :
Beachten Sie jedoch, dass dies ein String-zu-String-Ersatz ist, sodass aus "Kategorie" "Dogegory" wird. Mit der Funktion regexp_replace können Sie möglicherweise ein strengeres Übereinstimmungsmuster für das definieren, was Sie ersetzen möchten.
quelle
regexp_replace
Der Weg des regulären Ausdrucks
Wenn Sie einen strengeren Ersatzabgleich benötigen, kann die
regexp_replace
Funktion von PostgreSQL mithilfe von POSIX-Mustern für reguläre Ausdrücke übereinstimmen . Es hat die Syntax regexp_replace (Quelle, Muster, Ersetzung [, Flags]) .Ich werde Flags
i
undg
für Matching ohne Berücksichtigung der Groß- und Kleinschreibung verwenden. Ich werde auch verwenden\m
und\M
den Anfang und das Ende eines Wortes zu entsprechen, respectively.Bei der Durchführung von Regex-Ersetzungen treten normalerweise einige Fallstricke auf. Mal sehen, wie einfach es ist, eine Katze durch einen Hund zu ersetzen .
Auch nach alledem gibt es mindestens einen ungelösten Zustand. Beispielsweise werden Sätze, die mit "Katze" beginnen, durch "Hund" in Kleinbuchstaben ersetzt, die die Großschreibung von Sätzen unterbrechen.
Alle Details finden Sie in den aktuellen PostgreSQL- Dokumenten zum Mustervergleich .
Aktualisieren Sie die gesamte Spalte mit Ersatztext
In Anbetracht meiner Beispiele wäre die sicherste Option vielleicht:
quelle
Sie können die
replace
Funktion verwendenDie Funktionsdefinition lautet wie folgt (von hier erhalten ):
und gibt den geänderten Text zurück. Sie können sich auch diese SQL-Geige ansehen .
quelle
Hier ist ein Beispiel, das alle Instanzen von 1 oder mehr Leerzeichen in einer Spalte durch einen Unterstrich mit regulären Ausdrücken ersetzt.
quelle