postgresql - Ersetzt alle Instanzen einer Zeichenfolge im Textfeld


Antworten:


404

Sie wollen PostgreSQLs verwenden ersetzen Funktion:

replace(string text, from text, to text)

zum Beispiel :

UPDATE <table> SET <field> = replace(<field>, 'cat', 'dog')

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.


4
Hallo Leute, ich mag deine Antwort und Erklärung, es ist wirklich hilfreich. Könnten Sie bitte ein Beispiel mit regexp_replace hinzufügen? Vielen Dank!
Wim Feijen

1
Für eine bessere Granularität können Sieregexp_replace
drs

83

Der Weg des regulären Ausdrucks

Wenn Sie einen strengeren Ersatzabgleich benötigen, kann die regexp_replaceFunktion 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 iund gfür Matching ohne Berücksichtigung der Groß- und Kleinschreibung verwenden. Ich werde auch verwenden \mund \Mden 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 .

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog');
-->                    Cat bobdog cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'i');
-->                    dog bobcat cat cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'g');
-->                    Cat bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat', 'dog', 'gi');
-->                    dog bobdog dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat', 'dog', 'gi');
-->                    dog bobcat dog dogs dogfish

SELECT regexp_replace('Cat bobcat cat cats catfish', 'cat\M', 'dog', 'gi');
-->                    dog bobdog dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat\M', 'dog', 'gi');
-->                    dog bobcat dog cats catfish

SELECT regexp_replace('Cat bobcat cat cats catfish', '\mcat(s?)\M', 'dog\1', 'gi');
-->                    dog bobcat dog dogs catfish

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:

UPDATE table SET field = regexp_replace(field, '\mcat\M', 'dog', 'gi');

30

Sie können die replaceFunktion verwenden

UPDATE your_table SET field = REPLACE(your_field, 'cat','dog')

Die Funktionsdefinition lautet wie folgt (von hier erhalten ):

replace(string text, from text, to text)

und gibt den geänderten Text zurück. Sie können sich auch diese SQL-Geige ansehen .


0

Hier ist ein Beispiel, das alle Instanzen von 1 oder mehr Leerzeichen in einer Spalte durch einen Unterstrich mit regulären Ausdrücken ersetzt.

select distinct on (pd)
regexp_replace(rndc.pd, '\\s+', '_','g') as pd
from rndc14_ndc_mstr rndc;

Ich denke, es wird nur ein Backslash benötigt, bevor das "s" benötigt wird
Marty Neal
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.