Utilisez des fonctions d’expression régulières dans Fabric Data Warehouse

S’applique à :✅ L'endpoint analytique SQL et l'entrepôt de données dans Microsoft Fabric

Les fonctions d’expression régulière (regex) vous permettent de faire correspondre des motifs textuels complexes et de manipuler directement des données de chaînes dans vos requêtes T-SQL. Utilisez-les pour valider les formats, extraire des valeurs de texte semi-structuré, compter les occurrences de motifs, et nettoyer ou masquer les données sans les déplacer hors de l’entrepôt.

Note

Les expressions régulières sont actuellement en préversion.

Warehouse et le point de terminaison d’analyse SQL prennent en charge les fonctions d’expression régulière scalaires . Chacune de ces fonctions renvoie une valeur par ligne d’entrée, vous pouvez donc les utiliser dans les expressions SELECT, WHERE, JOIN, GROUP BY, ORDER BY et CASE.

Note

Seules les fonctions scalaires d’expression régulière sont disponibles dans Warehouse. Les fonctions à valeurs de table REGEXP_MATCHES et REGEXP_SPLIT_TO_TABLE ne sont pas prises en charge.

Fonctions prises en charge

Function Type de retour Description
REGEXP_LIKE Boolean Indique si le texte entré correspond au motif régulier. Utilisez-le comme prédicat, par exemple dans une clause WHERE ou une expression CASE.
REGEXP_REPLACE Expression de chaîne Retourne la chaîne source avec les occurrences du motif regex remplacées par une chaîne de remplacement. Si aucune correspondance n’est trouvée, la chaîne d’origine est renvoyée.
REGEXP_SUBSTR Expression de chaîne Retourne la n-ièmeoccurrence d’une sous-chaîne correspondant au motif régulier.
REGEXP_INSTR int Retourne la position de départ ou de fin de la sous-chaîne correspondante.
REGEXP_COUNT int Retourne le nombre de fois où le motif régulier apparaît dans une chaîne.

Syntax

REGEXP_LIKE ( string_expression, pattern_expression [ , flags ] )

REGEXP_REPLACE ( string_expression, pattern_expression [ , string_replacement [ , start [ , occurrence [ , flags ] ] ] ] )

REGEXP_SUBSTR ( string_expression, pattern_expression [ , start [ , occurrence [ , flags [ , group ] ] ] ] )

REGEXP_INSTR ( string_expression, pattern_expression [ , start [ , occurrence [ , return_option [ , flags [ , group ] ] ] ] ] )

REGEXP_COUNT ( string_expression, pattern_expression [ , start [ , flags ] ] )

Pour une description complète de chaque argument, voir la documentation de référence de la fonction en lien dans Fonctions supportées.

Drapeaux

L’argument optionnel flags est une valeur char ou varchar allant jusqu’à 30 caractères qui définit les modificateurs correspondants. Si vous fournissez des options contradictoires, la dernière l’emporte. Par exemple, 'ic' cela donne un appariement sensible à la casse.

Flag Description
c Correspondance entre majuscules et minuscules. Il s’agit de la valeur par défaut.
i Correspondance insensible à la casse.
m Mode multi-lignes : ^ et $ correspondent au début et à la fin de chaque ligne, en plus du début et de la fin du texte.
s Faisons . correspondre le caractère \nde nouvelle ligne.

Considerations

  • L’argument string_expression accepte les types de chaînes de caractères. Les valeurs grandes (varchar(max)) sont prises en charge jusqu’à 2 Mo.
  • L’argument pattern_expression permet une longueur maximale de 8 000 octets.
  • Les fonctions d’expression régulière ne respectent pas les règles de collation. L’appariement peut différer d’autres comparaisons de chaînes, comme LIKE. Pour contrôler la sensibilité à la casse, utilisez les indicateurs i et c au lieu de vous fier à la collation des colonnes. Pour plus d’informations, consultez interclassement de l’entrepôt de données.
  • REGEXP_LIKE renvoie une valeur booléenne et ne peut pas être retournée directement en colonne. Pour retourner le résultat sous forme de colonne, encapsulez-le dans une expression CASE.

Examples

Les exemples suivants utilisent un petit jeu de données inline, ce qui permet de les exécuter dans n’importe quel entrepôt ou point d’accès SQL analytics.

A. Filtrer les lignes qui correspondent à un motif

Utilisez REGEXP_LIKE dans une WHERE clause pour ne retourner que les lignes avec un format d’adresse email valide.

SELECT CustomerId, Email
FROM (VALUES
        (1, 'anna@contoso.com'),
        (2, 'not-an-email'),
        (3, 'Bob.Smith@Fabrikam.org')
     ) AS c (CustomerId, Email)
WHERE REGEXP_LIKE(Email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');

Pour retourner le résultat de correspondance sous forme de colonne, encapsulez REGEXP_LIKE dans une expression CASE :

SELECT Email,
       CASE WHEN REGEXP_LIKE(Email, '@contoso\.com$', 'i') THEN 'Internal' ELSE 'External' END AS EmailType
FROM (VALUES ('anna@CONTOSO.com'), ('bob@fabrikam.org')) AS c (Email);

B. Extraire une valeur du texte

Utilisez REGEXP_SUBSTR pour extraire le premier numéro de commande au format ORD- suivi de chiffres, à partir d’un commentaire en texte libre.

SELECT Comment,
       REGEXP_SUBSTR(Comment, 'ORD-\d+') AS OrderNumber
FROM (VALUES
        ('Customer called about ORD-10293 and ORD-10311.'),
        ('No order referenced.')
     ) AS t (Comment);

Pour n’extraire qu’une partie de la correspondance, utilisez un groupe de capture. La requête suivante renvoie le domaine de chaque adresse email :

SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);

C. Compter les occurrences du motif

Utilisez REGEXP_COUNT pour compter combien de chiffres apparaissent dans chaque chaîne.

SELECT Comment,
       REGEXP_COUNT(Comment, '\d+') AS NumberCount
FROM (VALUES
        ('Shipped 3 boxes on 12 May, invoice 4471.'),
        ('No numbers here.')
     ) AS t (Comment);

D. Trouver la position d’une occurrence

Utilisez REGEXP_INSTR pour trouver la position de départ et la position finale de la première séquence de chiffres.

SELECT ProductCode,
       REGEXP_INSTR(ProductCode, '\d+')             AS FirstDigitStart,
       REGEXP_INSTR(ProductCode, '\d+', 1, 1, 1)    AS FirstDigitEnd
FROM (VALUES ('BK-R93R-62'), ('HL-U509')) AS p (ProductCode);

E. Nettoyer et masquer les données

À utiliser REGEXP_REPLACE pour standardiser les numéros de téléphone avec des groupes de capture, et pour masquer tous les chiffres sauf les quatre derniers.

SELECT Phone,
       REGEXP_REPLACE(Phone, '^(\d{3})-(\d{3})-(\d{4})$', '(\1) \2-\3') AS FormattedPhone,
       REGEXP_REPLACE(Phone, '^\d{3}-\d{3}', '***-***')               AS MaskedPhone
FROM (VALUES ('425-555-0187'), ('206-555-0142')) AS c (Phone);

La requête suivante comprime les espaces blancs répétés en un seul espace :

SELECT REGEXP_REPLACE('Fabric    Data   Warehouse', '\s+', ' ') AS CleanText;

F. Grouper et agréger par une valeur extraite

Comme les fonctions sont scalaires, vous pouvez les utiliser dans des clauses GROUP BY. La requête suivante compte les clients par domaine email.

SELECT LOWER(REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1)) AS EmailDomain,
       COUNT(*) AS Customers
FROM (VALUES
        ('anna@contoso.com'),
        ('bob@Contoso.com'),
        ('chris@fabrikam.org')
     ) AS c (Email)
GROUP BY LOWER(REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1));