SQL - C’est quoi REGEXP_REPLACE() sur BigQuery?

SQL - C’est quoi REGEXP_REPLACE() sur BigQuery?

Date de sortie
December 17, 2024
Auteur
Bertrand Fabre

💡 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 !