💡 L’astuce data : c’est quoi REGEXP_REPLACE() ?
“La dernière fois, tu m’avais expliqué comment faire des filtres flexible sur des chaînes de caractères. Tu n’aurais pas quelque chose qui ressemble mais pour plutôt faire de la correction de texte ?”.
La fonction que nous avions vu ensemble précédemment est REGEXP_CONTAINS().
Effectivement, il y a une fonction qui permet de remplacer du texte selon un certain pattern que l’on définit avec des expressions régulières : c’est REGEXP_REPLACE().
On va d’abord commencer par présenter la syntaxe.
REGEXP_REPLACE(laValeurARemplacer, lePatternRecherché, laValeurDeRemplacement)
- laValeurARemplacer : on peut mettre une chaîne de caractères ou une colonne d’une table ;
- lePatternRecherché : c’est l’expression régulière qui va permettre d’identifier la sous-chaîne de caractères que l’on souhaite remplacer ;
- laValeurDeRemplacement : c’est la chaîne de caractères que l’on souhaite mettre à la place de celle identifiée par le pattern.
Pour que cela soit plus clair, on va prendre un jeu de données d’un référentiel de produit.
L’objectif est de corriger le nom de la catégorie du produit P006 qui n’a pas de “s” à la fin de “Vêtement”.
WITH retail_data AS (
SELECT 'P001' AS product_id, 'T-Shirt' AS product_name, 'Vêtements' AS category UNION ALL
SELECT 'P002', 'Jeans', 'Vêtements' UNION ALL
SELECT 'P003', 'Montre', 'Accessoires' UNION ALL
SELECT 'P004', 'Chaussures', 'Chaussures' UNION ALL
SELECT 'P005', 'Ceinture', 'Accessoires' UNION ALL
SELECT 'P006', 'Pull', 'Vêtement'
)
SELECT
category,
REGEXP_REPLACE(category, r'Vêtement$', 'Vêtements') AS categoryCorrected
FROM retail_data
;
Pour y avoir plus clair, j’ai affiché l’ancienne colonne avec la faute et la nouvelle corrigée grâce à la fonction REGEXP_REPLACE().
product_id | category | categoryCorrected |
P006 | Vêtement | Vêtements |
P004 | Chaussures | Chaussures |
P001 | Vêtements | Vêtements |
P002 | Vêtements | Vêtements |
P003 | Accessoires | Accessoires |
P005 | Accessoires | Accessoires |
On voit donc que le libellé de la catégorie du produit P006 est bien passé de “Vêtement” à “Vêtements”.
En effet, dans la fonction REGEXP_REPLACE() on lui a dit d’appliquer le traitement sur la colonne category, de rechercher le pattern “Vêtement$” donc le “$” signifie la fin du pattern. Ce qui permet de ne pas prendre les catégories qui ont déjà un “s”.
Puis on lui dit de mettre “Vêtements” à place du pattern trouvé.
Merci de votre lecture !