PostgreSQL Remplacer les chaînes

Joy Idialu 30 janvier 2023
  1. Remplacer les chaînes à l’aide de la fonction replace() dans PostgreSQL
  2. Remplacer les chaînes à l’aide de la fonction regexp_replace() dans PostgreSQL
  3. Plus d’exemples de fonctions PostgreSQL replace()
PostgreSQL Remplacer les chaînes

Ce tutoriel explique comment remplacer des chaînes à l’aide de la fonction replace() de PostgreSQL.

Remplacer les chaînes à l’aide de la fonction replace() dans PostgreSQL

La fonction PostgreSQL replace() a les paramètres suivants qui sont tous de type texte :

replace (string text, from text, to text)

Le paramètre string est le texte source sur lequel la fonction replace() est exécutée. Le paramètre from est une sous-chaîne de l’argument string et représente la partie à modifier.

Le paramètre to représente la sous-chaîne de l’argument string en laquelle l’argument from doit être modifié.

Par exemple, changeons le mot Catfish en Turtle en utilisant la fonction replace(), comme montré ici :

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

Le résultat est:

 replace
---------
 Turtle

Remplaçons la sous-chaîne Cat dans Catfish par Jelly, comme indiqué ici :

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

Le résultat est:

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

Cette fonction peut également être utilisée pour remplacer des caractères spéciaux dans une chaîne. Par exemple, en remplaçant un espace vide par une virgule, comme illustré ici :

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

Le résultat est:

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

Disons que nous avons un texte de caractères aléatoires et que nous voulons remplacer chaque occurrence du caractère a par b, que le caractère a soit en majuscule ou en minuscule. Si nous exécutons cette commande, comme indiqué ici :

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

Le résultat est:

 replace
---------
 bgAdbvA

Le résultat ci-dessus ne satisfait pas à l’exigence de remplacer toutes les occurrences de a majuscule et minuscule par b, car seules les occurrences de a minuscule ont été remplacées. Il faudrait donc introduire la fonction PostgreSQL regexp_replace().

Remplacer les chaînes à l’aide de la fonction regexp_replace() dans PostgreSQL

La fonction PostgreSQL regexp_replace() a les paramètres suivants qui sont tous de type texte :

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

L’argument string est la chaîne source sur laquelle la fonction de remplacement est exécutée. Le paramètre pattern représente l’expression régulière pour laquelle il doit y avoir une correspondance avant qu’une sous-chaîne de l’argument chaîne puisse être remplacée.

Le paramètre replacement représente le texte auquel nous modifions la sous-chaîne de l’argument de chaîne. Le paramètre flags représente le texte qui peut être utilisé pour modifier le comportement de la fonction regexp_replace().

Dans l’exemple précédent, où nous devions changer toutes les occurrences majuscules et minuscules de a en b, nous pouvons utiliser la fonction regexp_replace(), comme indiqué ici :

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

Le résultat est:

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

Avec l’introduction de l’expression régulière, toutes les occurrences de a majuscule et minuscule ont été remplacées au besoin. Le drapeau g garantit que toutes les occurrences et pas seulement la première occurrence de a sont remplacées.

Voici la documentation de PostgreSQL sur pattern matching.

Plus d’exemples de fonctions PostgreSQL replace()

Supposons que nous ayons un tableau avec une colonne nommée text composée de mots simples, comme illustré ici :

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

Et nous voulons remplacer chaque occurrence du mot Red par Yellow. Nous pouvons utiliser la fonction replace(), comme indiqué ici :

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

Le résultat est:

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

Disons que dans le même tableau, nous avons des mots avec des caractères spéciaux dans le champ text, comme illustré ici :

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

Et nous voulons remplacer toutes les occurrences du trait d’union (-) par un trait de soulignement (_). La fonction replace() peut y parvenir, comme indiqué ici :

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

Le résultat est:

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

Si nous insérons plus d’enregistrements dans la table de sorte que le champ text contienne des phrases au lieu d’un seul mot, comme illustré ici :

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

Et nous voulons remplacer le mot red par yellow. Ceci peut être réalisé en utilisant la fonction replace(), comme indiqué ici :

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

Le résultat est:

 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

Pour suivre, voici les commandes à exécuter :

--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;

Dans ce didacticiel, nous avons expliqué comment remplacer des chaînes à l’aide des fonctions PostgreSQL replace() et regexp_replace et comment la fonction replace() peut être utilisée pour mettre à jour des chaînes dans une table.

Article connexe - PostgreSQL String