Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:✅ SQL Analytics-eindpunt en -magazijn in Microsoft Fabric
Functies voor reguliere expressies (regex) laten je complexe tekstpatronen matchen en stringgegevens direct in je T-SQL-queries manipuleren. Gebruik ze om formaten te valideren, waarden uit semi-gestructureerde tekst te halen, patroonvoorkomsten te tellen en data te reinigen of te maskeren zonder deze uit het warehouse te verplaatsen.
Note
Reguliere expressies zijn momenteel in preview.
Warehouse en het SQL-analyse-eindpunt ondersteunen de scalaire reguliere expressiefuncties. Elk van deze functies geeft één waarde per invoerrij terug, dus je kunt ze gebruiken in de SELECT lijst, WHERE, JOIN, GROUP BY, , ORDER BYen CASE expressies.
Note
Alleen scalaire reguliere expressiefuncties zijn beschikbaar in Warehouse. De tabel-gewaardeerde functies REGEXP_MATCHES en REGEXP_SPLIT_TO_TABLE worden niet ondersteund.
Ondersteunde functies
| Functie | Terugbrengtype | Description |
|---|---|---|
| REGEXP_LIKE | Booleaanse | Geeft aan of de tekstinvoer overeenkomt met het regex-patroon. Gebruik het als predicaat, bijvoorbeeld in een WHERE clausule of een CASE uitdrukking. |
| REGEXP_REPLACE | String expression | Geeft de bronstring terug waarbij voorkomens van het regex-patroon worden vervangen door een vervangende string. Als er geen overeenkomsten worden gevonden, wordt de originele string teruggegeven. |
| REGEXP_SUBSTR | tekenreeks-expressie | Geeft het n-devoorkomen van een substring terug die overeenkomt met het regex-patroon. |
| REGEXP_INSTR | int |
Geeft de begin- of eindpositie van de gematchte substring terug. |
| REGEXP_COUNT | int |
Geeft het aantal keren dat het regex-patroon voorkomt in een string terug. |
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 ] ] )
Voor een volledige beschrijving van elk argument, zie de gekoppelde functiereferentie in Ondersteunde functies.
Flags
Het optionele flags argument is een char of of varchar waarde tot 30 tekens die de matchingmodifiers bepaalt. Als je tegenstrijdige vlaggen aangeeft, wint de laatste. Bijvoorbeeld, 'ic' resulteert in hoofdlettergevoelige matching.
| Flag | Description |
|---|---|
c |
Hoofdlettergevoelige overeenkomsten. Dit is de standaardwaarde. |
i |
Hoofdletterongevoelige overeenkomsten. |
m |
Multi-regelige modus: ^ en $ komen overeen met het begin en einde van elke regel, naast het begin en einde van de tekst. |
s |
Laten we . het regelafbrekingsteken \n matchen. |
Considerations
- Het
string_expressionargument accepteert tekenreekstypes. Grote waarden (varchar(max)) worden ondersteund tot 2 MB. - Het
pattern_expressionargument ondersteunt een maximale lengte van 8.000 bytes. - Functies voor reguliere expressies houden zich niet aan de collatieregels. Matching kan verschillen van andere stringvergelijkingen, zoals
LIKE. Om de hoofdlettergevoeligheid te regelen, gebruik je dei- enc-vlaggen in plaats van af te gaan op de kolomsortering. Zie Data Warehouse-sortering voor meer informatie. -
REGEXP_LIKEgeeft een Booleaanse waarde terug en kan niet direct als kolom worden teruggegeven. Om het resultaat als kolom terug te geven, wikkel je het in eenCASEuitdrukking.
Examples
De volgende voorbeelden gebruiken een kleine inline dataset, zodat je ze in elk warehouse of elk SQL-analyse-endpoint kunt draaien.
A. Filter rijen die overeenkomen met een patroon
Gebruik REGEXP_LIKE in een WHERE-clausule om alleen rijen met een geldig e-mailadresformaat te retourneren.
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,}$');
Om het matchresultaat als kolom terug te geven, wikkel REGEXP_LIKE in een CASE-expressie:
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. Haal een waarde uit tekst
Gebruik REGEXP_SUBSTR om uit een vrijetekstcommentaar het eerste ordernummer te extraheren in de notatie ORD- gevolgd door cijfers.
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);
Om slechts een deel van de match te extraheren, gebruik je een capture group. De volgende zoekopdracht geeft het domein van elk e-mailadres terug:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Patroonvoorkomens tellen
Gebruik REGEXP_COUNT om te tellen hoeveel getallen er in elke reeks voorkomen.
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. Vind de positie van een match
Gebruik REGEXP_INSTR om de beginpositie en de eindpositie van de eerste reeks cijfers te vinden.
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. Gegevens opschonen en maskeren
Gebruik REGEXP_REPLACE om telefoonnummers te standaardiseren met capture-groepen en om alle cijfers behalve de laatste vier cijfers te maskeren.
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);
De volgende query vouwt herhaalde witruimte samen tot één ruimte:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Groeperen en aggregeren op basis van een geëxtraheerde waarde
Omdat de functies scalair zijn, kun je ze in GROUP BY clausules gebruiken. De volgende query telt klanten per e-maildomein.
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));