Käytä säännöllisiä lausekkofunktioita Fabric tietovarasto

Koskee:✅ SQL-analytiikan päätepiste ja Microsoft Fabric -varasto

Säännöllisen lausekkeen (regex) funktiot mahdollistavat monimutkaisten tekstikuvioiden yhdistämisen ja merkkijonodatan käsittelyn suoraan T-SQL-kyselyissä. Käytä niitä formaattien validointiin, arvojen poimimiseen puolirakenteellisesta tekstistä, kuvioiden laskemiseen sekä datan puhdistamiseen tai peittämiseen siirtämättä sitä pois varastosta.

Note

Säännölliset lausekkeet ovat tällä hetkellä esikatseluvaiheessa.

Warehouse ja SQL-analytiikkapäätepiste tukevat skalaarisäännöllisten lausekkeiden funktioita. Jokainen näistä funktioista palauttaa yhden arvon per syöterivi, joten voit käyttää niitä SELECT listassa, WHERE, JOIN, GROUP BY, ORDER BY, ja CASE lausekkeissa.

Note

Warehousessa on käytettävissä vain skalaariset säännölliset lausekkeet. Taulukko-arvoiset toiminnot REGEXP_MATCHES ja REGEXP_SPLIT_TO_TABLE eivät ole tuettuja.

Tuetut toiminnot

Toiminto Palautuksen tyyppi Kuvaus
REGEXP_LIKE totuusarvo Ilmaisee, vastaako tekstisyöte regex-mallia. Käytä sitä predikaattina, esimerkiksi WHERE lauseessa tai CASE lausekkeessa.
REGEXP_REPLACE Merkkijonolauseke Palauttaa lähdemerkkijonon, jossa regex-kuvion esiintymiset on korvattu korvaavalla merkkijonolla. Jos osumia ei löydy, palauttaa alkuperäinen merkkijono.
REGEXP_SUBSTR Merkkijonolauseke Palauttaa n:nnen esiintymän alimerkkijonosta, joka vastaa regex-mallia.
REGEXP_INSTR int Palauttaa sovitetun alijonon aloitus- tai lopetuspaikan.
REGEXP_COUNT int Palauttaa sen kerran, kuinka monta kertaa regex-kuvio esiintyy merkkijonossa.

Syntaksi

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 ] ] )

Jokaisen argumentin täydellisen kuvauksen löydät linkitetyistä funktioviiteistä Tuetut funktiot.

Liput

Valinnainen flags argumentti on enintään char 30 merkin arvoinen tai varchar -arvo, joka määrittää yhteensopivat modifikaattorit. Jos annat ristiriitaisia lippuja, viimeinen voittaa. Esimerkiksi 'ic' johtaa kirjainkoon sensitiiviseen vastaavuuteen.

Merkitse Kuvaus
c Kirjainkoon perustuva vastaavuus. Tämä on oletusarvo.
i Kirjainkoon sitoutumaton vastaavuus.
m Monirivitila: ^ ja $ sovita jokaisen rivin alku ja loppu sekä tekstin alku ja loppu.
s Sovitetaan . uuden rivin merkki \n.

Huomioitavat asiat

  • Argumentti string_expression hyväksyy merkkijonotyypit. Suuret arvot (varchar(max)) ovat tuettuja jopa 2 MB asti.
  • Argumentti pattern_expression tukee enintään 8 000 tavun pituutta.
  • Säännöllisten lausekeiden funktiot eivät kunnioita vertailusääntöjä. Sovitus voi poiketa muista merkkijonojen vertailuista, kuten LIKE. Kirjainkoon herkkyyden hallintaan käytetään i ja-lippuja c sen sijaan, että luottaisit sarakkeiden kokoamiseen. Lisätietoja löytyy osoitteesta tietovarasto collation.
  • REGEXP_LIKE palauttaa Boolen arvon eikä sitä voi palauttaa suoraan sarakkeena. Palauttaaksesi tuloksen sarakkeena, kääri se lausekkeeksi CASE .

Esimerkkejä

Seuraavat esimerkit käyttävät pientä inline-tietojoukkoa, joten voit ajaa niitä missä tahansa varasto- tai SQL-analytiikkapäätepisteessä.

V. Suodata rivejä, jotka vastaavat kuviota

Käytä REGEXP_LIKE lauseketta WHERE palauttamaan vain rivejä, joissa sähköpostiosoitteen muoto on kelvollinen.

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,}$');

Palauttaaksesi osumatuloksen sarakkeena, kääritään REGEXP_LIKE lauseke: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. Poima arvo tekstistä

Käytä REGEXP_SUBSTR ensimmäisen tilausnumeron poimimiseen muodossa ORD- ja sen jälkeen numerot vapaatekstikommentista.

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);

Jos haluat saada vain osan ottelusta, käytä vangitsemisryhmää. Seuraava kysely palauttaa kunkin sähköpostiosoitteen verkkotunnuksen:

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

C. Laskentakuvion esiintymiset

Käytä REGEXP_COUNT laskemiseen, kuinka monta numeroa kussakin merkkijonossa esiintyy.

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. Etsi ottelun sijainti

Käytetään REGEXP_INSTR löytääksesi ensimmäisen numerojonon aloitus- ja lopetuspaikan.

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. Puhdista ja peitä data

Sitä käytetään REGEXP_REPLACE puhelinnumeroiden yhdenmukaistamiseen kaappausryhmillä ja kaikkien paitsi viimeisten neljän numeron peittämiseen.

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);

Seuraava kysely tiivistää toistuvat tyhjät tilat yhdeksi välilyönniksi:

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

F. Ryhmittele ja aggregoi poimitulla arvolla

Koska funktiot ovat skalaarisia, niitä voi käyttää lauseissa GROUP BY . Seuraava kysely laskee asiakkaat per sähköpostiverkkotunnus.

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));