PostgreSQL Ersetzen von Zeichenketten

Joy Idialu 18 August 2022
  1. Strings ersetzen mit der replace()-Funktion in PostgreSQL
  2. Ersetzen von Zeichenketten mit der Funktion regexp_replace() in PostgreSQL
  3. Weitere PostgreSQL replace() Funktionsbeispiele
PostgreSQL Ersetzen von Zeichenketten

In diesem Tutorial wird erläutert, wie Zeichenfolgen mit der PostgreSQL-Funktion replace() ersetzt werden.

Strings ersetzen mit der replace()-Funktion in PostgreSQL

Die PostgreSQL-Funktion replace() hat die folgenden Parameter, die alle vom Typ Text sind:

replace (string text, from text, to text)

Der Parameter string ist der Quelltext, auf dem die Funktion replace() ausgeführt wird. Der from-Parameter ist ein Teilstring des string-Arguments und stellt den zu ändernden Teil dar.

Der to-Parameter stellt den Teilstring des string-Arguments dar, in den das from-Argument geändert werden soll.

Ändern wir zum Beispiel das Wort Catfish in Turtle mit der Funktion replace(), wie hier gezeigt:

SELECT replace ('Catfish', 'Catfish', 'Turtle');

Das Ergebnis ist:

 replace
---------
 Turtle

Ersetzen wir den Teilstring Cat in Catfish durch Jelly, wie hier gezeigt:

SELECT replace('Catfish', 'Cat', 'Jelly');

Das Ergebnis ist:

  replace
-----------
 Jellyfish

Diese Funktion kann auch verwendet werden, um Sonderzeichen in einer Zeichenfolge zu ersetzen. Ersetzen Sie beispielsweise ein Leerzeichen durch ein Komma, wie hier gezeigt:

SELECT replace('A B C D E', ' ', ',');

Das Ergebnis ist:

  replace
-----------
 A,B,C,D,E

Nehmen wir an, wir haben einen Text mit zufälligen Zeichen und möchten jedes Vorkommen des Zeichens a durch b ersetzen, unabhängig davon, ob das Zeichen a in Groß- oder Kleinbuchstaben geschrieben ist. Wenn wir diesen Befehl ausführen, wie hier gezeigt:

SELECT replace('agAdavA', 'a', 'b');

Das Ergebnis ist:

 replace
---------
 bgAdbvA

Das oben gezeigte Ergebnis erfüllt nicht die Anforderung, alle Vorkommen sowohl des großen als auch des kleinen a durch b zu ersetzen, da nur die Vorkommen des kleinen a ersetzt wurden. Daher müssten wir die PostgreSQL-Funktion regexp_replace() einführen.

Ersetzen von Zeichenketten mit der Funktion regexp_replace() in PostgreSQL

Die PostgreSQL-Funktion regexp_replace() hat die folgenden Parameter, die alle vom Typ Text sind:

regexp_replace (string text, pattern text, replacement text [,flags text])

Das Argument string ist der Quellstring, für den die Ersetzungsfunktion ausgeführt wird. Der Parameter pattern stellt den regulären Ausdruck dar, für den eine Übereinstimmung vorliegen muss, bevor ein Teilstring des String-Arguments ersetzt werden kann.

Der Parameter replacement stellt den Text dar, in den wir den Teilstring des String-Arguments ändern. Der Parameter flags stellt den Text dar, mit dem das Verhalten der Funktion regexp_replace() geändert werden kann.

Im vorherigen Beispiel, wo wir alle Groß- und Kleinbuchstaben von a in b ändern mussten, können wir die Funktion regexp_replace() verwenden, wie hier gezeigt:

SELECT regexp_replace('agAdavA', '[a | A]+', 'b', 'g');

Das Ergebnis ist:

 regexp_replace
----------------
 bgbdbvb

Mit der Einführung des regulären Ausdrucks wurden alle Vorkommen von Gross- und Kleinbuchstaben a bedarfsgerecht ersetzt. Das g-Flag stellt sicher, dass alle Vorkommen und nicht nur das erste Vorkommen von a ersetzt werden.

Hier ist die PostgreSQL-Dokumentation zu Musterabgleich.

Weitere PostgreSQL replace() Funktionsbeispiele

Nehmen wir an, wir haben eine Tabelle mit einer Spalte namens text, die aus einzelnen Wörtern besteht, wie hier gezeigt:

id text
1 Red
2 Green
3 Blue
4 Red
5 Red

Und wir wollen jedes Vorkommen des Wortes Red durch Yellow ersetzen. Wir können die Funktion replace() verwenden, wie hier gezeigt:

UPDATE demo SET text = replace(text, 'Red', 'Yellow');

Das Ergebnis ist:

 id |  text
----+--------
  1 | Yellow
  2 | Green
  3 | Blue
  4 | Yellow
  5 | Yellow

Nehmen wir an, in derselben Tabelle haben wir Wörter mit Sonderzeichen im Feld text, wie hier gezeigt:

id text
6 g-r-e-e-n
7 1-23–4
8 one-and-two
9 —n—2—
10 —–

Und wir wollen alle Vorkommen des Bindestrichs (-) durch Unterstriche (_) ersetzen. Die Funktion replace() kann das, wie hier gezeigt, erreichen:

UPDATE demo SET text = replace(text, '-', '_');

Das Ergebnis ist:

 id |    text
----+-------------
  6 | g_r_e_e_n
  7 | 1_23__4
  8 | one_and_two
  9 | ___n___2___
 10 | _____

Wenn wir mehr Datensätze in die Tabelle einfügen, sodass das Feld text Sätze anstelle eines einzelnen Wortes enthält, wie hier gezeigt:

id text
11 She bought a red bag
12 Green is a good color
13 The sky is blue
14 The color of the shirt is red
15 They plan to go with blue or red balloons

Und wir wollen das Wort rot durch gelb ersetzen. Dies kann mit der Funktion replace() erreicht werden, wie hier gezeigt:

UPDATE demo SET text = replace(text, 'red', 'yellow');

Das Ergebnis ist:

 id |                     text
----+----------------------------------------------
 11 | She bought a yellow bag
 12 | Green is a good color
 13 | The sky is blue
 14 | The color of the shirt is yellow
 15 | They plan to go with blue or yellow balloons

Um mitzumachen, hier sind die auszuführenden Befehle:

--CREATE statement
CREATE TABLE demo (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  text TEXT NOT NULL
);

--insert first set of records
INSERT INTO demo (text)
VALUES
  ('Red'),
  ('Green'),
  ('Blue'),
  ('Red'),
  ('Red');

--insert second set of records
INSERT INTO demo (text)
VALUES
  ('g-r-e-e-n'),
  ('1-23--4'),
  ('one-and-two'),
  ('---n---2---'),
  ('-----');

--insert third and final set of records
INSERT INTO demo (text)
VALUES
  ('She bought a red bag'),
  ('Green is a good color'),
  ('The sky is blue'),
  ('The color of the shirt is red'),
  ('They plan to go with blue or red balloons');

--update statements that include the REPLACE function
UPDATE demo SET text = replace(text, 'Red', 'Yellow');
UPDATE demo SET text = replace(text, '-', '_');
UPDATE demo SET text = replace(text, 'red', 'yellow');

--view all the changes
SELECT * FROM demo;

In diesem Tutorial haben wir besprochen, wie man Strings mit den PostgreSQL-Funktionen replace() und regexp_replace ersetzt und wie die Funktion replace() verwendet werden kann, um Strings in einer Tabelle zu aktualisieren.

Verwandter Artikel - PostgreSQL String