Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Gjelder for:✅ SQL Analytics-endepunkt og Warehouse i Microsoft Fabric
Regulære uttrykk (regex)-funksjoner lar deg matche komplekse tekstmønstre og manipulere strengdata direkte i T-SQL-spørringene dine. Bruk dem til å validere formater, trekke ut verdier fra semistrukturert tekst, telle mønsterforekomster, og rense eller maskere data uten å flytte dem ut av lageret.
Note
Regulære uttrykk er for øyeblikket i forhåndsvisning.
Warehouse og SQL-analyse-endepunktet støtter de skalare regulære uttrykksfunksjonene. Hver av disse funksjonene returnerer én verdi per inngangsrad, så du kan bruke dem i SELECT listen, WHERE, JOIN, GROUP BY, ORDER BY, og CASE uttrykkene.
Note
Kun skalare regulære uttrykksfunksjoner er tilgjengelige i Warehouse. Tabell-funksjonene REGEXP_MATCHES og REGEXP_SPLIT_TO_TABLE støttes ikke.
Funksjoner som støttes
| Funksjonen | Returtype | Description |
|---|---|---|
| REGEXP_LIKE | boolsk | Indikerer om tekstinputen samsvarer med regex-mønsteret. Bruk det som et predikat, for eksempel i en WHERE setning eller et CASE uttrykk. |
| REGEXP_REPLACE | Strenguttrykk | Returnerer kildestrengen med forekomster av regex-mønsteret erstattet av en erstatningsstreng. Hvis ingen treff finnes, returnerer den opprinnelige strengen. |
| REGEXP_SUBSTR | Strenguttrykk | Returnerer den n-teforekomsten av en delstreng som matcher regex-mønsteret. |
| REGEXP_INSTR | int |
Returnerer start- eller sluttposisjonen til den matchede delstrengen. |
| REGEXP_COUNT | int |
Returnerer antall ganger regex-mønsteret forekommer i en streng. |
Syntaks
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 ] ] )
For en fullstendig beskrivelse av hvert argument, se referansen for lenket funksjon i Støttede funksjoner.
Flagg
Det valgfrie flags argumentet er en char eller varchar verdi på opptil 30 tegn som setter matchende modifikatorer. Hvis du gir motstridende flagg, vinner det siste. For eksempel 'ic' resulterer i mellombokstavsfølsom matching.
| Flagg | Description |
|---|---|
c |
Case-sensitiv matching. Dette er standard. |
i |
Tilpasning uten mellombokstaver. |
m |
Flerlinjemodus: ^ og $ matcher begynnelsen og slutten av hver linje, i tillegg til begynnelsen og slutten av teksten. |
s |
La oss . matche linjeskiftet \n. |
Vurderinger
- Argumentet aksepterer
string_expressiontyper tegnstrenger. Store verdier (varchar(max)) støttes opptil 2 MB. - Argumentet
pattern_expressionstøtter en maksimal lengde på 8 000 byte. - Regulære uttrykksfunksjoner respekterer ikke kollasjonsregler. Matching kan skille seg fra andre strengsammenligninger, som
LIKE. For å kontrollere kasusfølsomhet, brukiog-flaggeneci stedet for å stole på kolonne-kollasjonen. For mer informasjon, se datalager collation. -
REGEXP_LIKEreturnerer en boolsk verdi og kan ikke returneres direkte som en kolonne. For å returnere resultatet som en kolonne, pakk det inn i etCASEuttrykk.
Eksempler
Følgende eksempler bruker et lite innebygd datasett, slik at du kan kjøre dem i hvilket som helst lager eller SQL-analyseendepunkt.
A. Filterrader som matcher et mønster
Bruk REGEXP_LIKE i en WHERE klausul for å returnere kun rader med gyldig e-postadresseformat.
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,}$');
For å returnere matchresultatet som en kolonne, pakk REGEXP_LIKE inn et CASE uttrykk:
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. Trekk ut en verdi fra tekst
Bruk REGEXP_SUBSTR for å hente ut det første ordensnummeret i formatet ORD- etterfulgt av sifre fra en fritekstkommentar.
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);
For å hente ut bare deler av matchen, bruk en capture group. Følgende spørring gir domenet til hver e-postadresse:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Forekomster av tellemønstre
Bruk REGEXP_COUNT den til å telle hvor mange tall som dukker opp i hver streng.
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. Finn posisjonen til en kamp
Bruk REGEXP_INSTR for å finne startposisjonen og sluttposisjonen til den første sekvensen av sifre.
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. Rens og masker data
Bruk REGEXP_REPLACE for å standardisere telefonnumre med opptaksgrupper, og for å maskere alle unntatt de siste fire sifrene.
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);
Følgende spørring samler gjentatt hvitrom til ett enkelt mellomrom:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Gruppere og aggregere med en utvunnet verdi
Fordi funksjonene er skalariske, kan du bruke dem i GROUP BY klausuler. Følgende spørring teller kunder per e-postdomene.
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));