Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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_expressionaccepte les types de chaînes de caractères. Les valeurs grandes (varchar(max)) sont prises en charge jusqu’à 2 Mo. - L’argument
pattern_expressionpermet 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 indicateursietcau lieu de vous fier à la collation des colonnes. Pour plus d’informations, consultez interclassement de l’entrepôt de données. -
REGEXP_LIKErenvoie 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 expressionCASE.
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));