Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:✅ endpoint di analisi SQL e magazzino dati in Microsoft Fabric
Le funzioni di espressione regolare (regex) ti permettono di abbinare pattern di testo complessi e manipolare direttamente i dati delle stringhe nelle tue query T-SQL. Usali per validare i formati, estrarre valori da testi semi-strutturati, contare le occorrenze dei pattern e pulire o mascherare i dati senza spostarli fuori dal warehouse.
Note
Le espressioni regolari sono attualmente in anteprima.
Warehouse e l'endpoint di analisi SQL supportano le funzioni scalari di espressioni regolari. Ognuna di queste funzioni restituisce un valore per ogni riga di input, quindi puoi usarle nell'elenco SELECT, WHERE, JOIN, GROUP BY, ORDER BY e nelle espressioni CASE.
Note
Solo funzioni scalari di espressione regolare sono disponibili in Warehouse. Le funzioni a valori di tabella REGEXP_MATCHES e REGEXP_SPLIT_TO_TABLE non sono supportate.
Funzioni supportate
| Function | Tipo di ritorno | Description |
|---|---|---|
| REGEXP_LIKE | Booleano | Indica se l'input di testo corrisponde al pattern regex. Usalo come predicato, ad esempio in una WHERE proposizione o in una CASE espressione. |
| REGEXP_REPLACE | Espressione stringa | Restituisce la stringa sorgente con le occorrenze del pattern regex sostituite da una stringa sostitutiva. Se non si trovano corrispondenze, restituisce la stringa originale. |
| REGEXP_SUBSTR | Espressione stringa | Restituisce l'n-esima occorrenza di una sottostringa che corrisponde al pattern regex. |
| REGEXP_INSTR | int |
Restituisce la posizione iniziale o finale della sottostringa abbinata. |
| REGEXP_COUNT | int |
Restituisce il numero di volte in cui il pattern regex si verifica in una stringa. |
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 ] ] )
Per una descrizione completa di ogni argomento, vedi il riferimento alla funzione collegata in Funzioni supportate.
Flags
L'argomento opzionale flags è un valore char o varchar di massimo 30 caratteri che imposta i modificatori corrispondenti. Se fornisci flag contraddittori, prevale l'ultimo. Ad esempio, 'ic' si traduce in una corrispondenza con distinzione tra maiuscole e minuscole.
| Flag | Description |
|---|---|
c |
Corrispondenza con distinzione tra maiuscole e minuscole. Si tratta dell'impostazione predefinita. |
i |
Corrispondenza senza distinzione tra maiuscole e minuscole. |
m |
Modalità multi-riga: ^ e $ corrispondono all'inizio e alla fine di ogni riga, oltre che all'inizio e alla fine del testo. |
s |
Abbina . il carattere \ndi nuova riga. |
Considerazioni
- L'argomento
string_expressionaccetta tipi di stringhe di caratteri. Valori grandi (varchar(max)) sono supportati fino a 2 MB. - L'argomento
pattern_expressionsupporta una lunghezza massima di 8.000 byte. - Le funzioni di espressione regolare non rispettano le regole di collazione. L'abbinamento può differire da altri confronti di stringhe, come
LIKE. Per controllare la distinzione tra maiuscole e minuscole, usa i flagiecinvece di affidarti alle regole di confronto della colonna. Per altre informazioni, vedere regole di confronto del Data Warehouse. -
REGEXP_LIKErestituisce un valore booleano e non può essere restituito direttamente come colonna. Per restituire il risultato come colonna, si avvolge in un'espressioneCASE.
Examples
I seguenti esempi utilizzano un piccolo set di dati inline, quindi puoi eseguirli in qualsiasi warehouse o endpoint SQL analytics.
A. Filtra le righe che corrispondono a un pattern
Usa REGEXP_LIKE in una clausola WHERE per restituire solo le righe con un indirizzo email valido.
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,}$');
Per restituire il risultato della corrispondenza come colonna, racchiudi REGEXP_LIKE in un'espressione 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. Estrai un valore dal testo
Usare REGEXP_SUBSTR per estrarre il primo numero d'ordine nel formato ORD- seguito da cifre in un commento in testo libero.
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);
Per estrarre solo una parte della corrispondenza, usa un gruppo di cattura. La seguente query restituisce il dominio di ciascun indirizzo email:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Conta le occorrenze del pattern
Usa REGEXP_COUNT per contare quanti numeri compaiono in ogni stringa.
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. Trova la posizione di una corrispondenza
Usare REGEXP_INSTR per trovare la posizione iniziale e la posizione finale della prima sequenza di cifre.
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. Pulisci e maschera i dati
Usa REGEXP_REPLACE per standardizzare i numeri di telefono con i gruppi di cattura e per mascherare tutte le cifre tranne le ultime quattro.
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 seguente query comprime gli spazi bianchi ripetuti in un unico spazio:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Raggruppare e aggregare per un valore estratto
Poiché le funzioni sono scalari, puoi usarle nelle GROUP BY clausole. La seguente query conta i clienti per ogni dominio 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));