Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
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_expressionhyväksyy merkkijonotyypit. Suuret arvot (varchar(max)) ovat tuettuja jopa 2 MB asti. - Argumentti
pattern_expressiontukee 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äänija-lippujacsen sijaan, että luottaisit sarakkeiden kokoamiseen. Lisätietoja löytyy osoitteesta tietovarasto collation. -
REGEXP_LIKEpalauttaa Boolen arvon eikä sitä voi palauttaa suoraan sarakkeena. Palauttaaksesi tuloksen sarakkeena, kääri se lausekkeeksiCASE.
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));