Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:✅ Ponto Final de Análise SQL e Armazém no Microsoft Fabric
As funções de expressão regular (regex) permitem-lhe corresponder padrões de texto complexos e manipular dados de strings diretamente nas suas consultas T-SQL. Utilize-os para validar formatos, extrair valores de texto semi-estruturado, contar ocorrências de padrões e limpar ou mascarar dados sem os mover para fora do armazém.
Note
As expressões regulares estão atualmente em pré-visualização.
O Warehouse e o endpoint de análise SQL suportam as funções scalar de expressões regulares. Cada uma destas funções devolve um valor por linha de entrada, por isso pode usá-las na lista SELECT, WHERE, JOIN, GROUP BY, ORDER BY, e CASE expressões.
Note
Apenas funções escalares de expressão regular estão disponíveis no Warehouse. As funções de retorno tabular REGEXP_MATCHES e REGEXP_SPLIT_TO_TABLE não são suportadas.
Funções suportadas
| Função | Tipo de retorno | Description |
|---|---|---|
| REGEXP_LIKE | booleano | Indica se a entrada de texto corresponde ao padrão regex. Use-o como predicado, por exemplo, numa oração WHERE ou numa expressão CASE. |
| REGEXP_REPLACE | Expressão de cadeia de caracteres | Devolve a cadeia de origem com as ocorrências do padrão regex substituídas por uma cadeia de substituição. Se não forem encontradas correspondências, devolve a cadeia original. |
| REGEXP_SUBSTR | Expressão de cadeia de caracteres | Retorna a n-ésima ocorrência de uma substring que corresponde ao padrão regex. |
| REGEXP_INSTR | int |
Retorna a posição inicial ou final da subcadeia correspondente. |
| REGEXP_COUNT | int |
Retorna o número de vezes que o padrão regex ocorre numa cadeia. |
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 ] ] )
Para uma descrição completa de cada argumento, veja a referência da função associada em Funções suportadas.
Flags
O argumento opcional flags é um valor char ou varchar de até 30 caracteres que define os modificadores correspondentes. Se fornecer sinalizadores contraditórios, o último prevalece. Por exemplo, 'ic' resulta em correspondência sensível a maiúsculas e minúsculas.
| Flag | Description |
|---|---|
c |
Correspondência que diferencia maiúsculas de minúsculas. Este é o padrão. |
i |
Correspondência que não diferencia maiúsculas de minúsculas. |
m |
Modo de múltiplas linhas: ^ e $ correspondem ao início e ao fim de cada linha, além do início e do fim do texto. |
s |
Vamos . corresponder ao caráter \n de nova linha. |
Considerations
- O
string_expressionargumento aceita tipos de cadeias de caracteres. Valores grandes (varchar(max)) são suportados até 2 MB. - O
pattern_expressionargumento suporta um comprimento máximo de 8.000 bytes. - As funções de expressão regular não respeitam as regras de ordenação. A correspondência pode diferir de outras comparações de cadeias, como
LIKE. Para controlar a distinção entre maiúsculas e minúsculas, use as opçõesiecem vez de depender da ordenação da coluna. Para obter mais informações, consulte Agrupamento do Armazém de Dados. -
REGEXP_LIKEdevolve um valor booleano e não pode ser devolvido diretamente como coluna. Para devolver o resultado como coluna, envolva-o numaCASEexpressão.
Examples
Os exemplos seguintes usam um pequeno conjunto de dados inline, por isso pode executá-los em qualquer armazém ou endpoint de análise SQL.
A. Filtre as linhas que correspondem a um padrão
Utilize REGEXP_LIKE numa cláusula WHERE para devolver apenas linhas com um formato de endereço de email válido.
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,}$');
Para devolver o resultado da correspondência como coluna, envolva REGEXP_LIKE numa expressão 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. Extrair um valor do texto
Utilize REGEXP_SUBSTR para extrair o primeiro número de encomenda no formato ORD- seguido de dígitos de um comentário em texto livre.
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);
Para extrair apenas parte da correspondência, use um grupo de captura. A consulta seguinte devolve o domínio de cada endereço de email:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Contar ocorrências de padrões
Utilize REGEXP_COUNT para contar quantos números aparecem em cada cadeia.
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. Encontre a posição de uma ocorrência
Utilize REGEXP_INSTR para encontrar a posição inicial e a posição final da primeira sequência de dígitos.
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. Limpar e mascarar dados
Use REGEXP_REPLACE para padronizar números de telefone com grupos de captura e para mascarar todos os dígitos, exceto os últimos quatro dígitos.
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);
A consulta seguinte colapsa o espaço em branco repetido num único espaço:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Agrupar e agregar com base num valor extraído
Como as funções são escalares, podes usá-las em cláusulas GROUP BY. A consulta seguinte conta os clientes por domínio de 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));