Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplicable a:✅ Punto final de análisis SQL y Almacén en Microsoft Fabric
Las funciones de expresión regular (regex) te permiten emparejar patrones de texto complejos y manipular datos de cadenas directamente en tus consultas T-SQL. Úsalos para validar formatos, extraer valores de texto semiestructurado, contar ocurrencias de patrones y limpiar o enmascarar datos sin moverlos fuera del almacén.
Note
Las expresiones regulares están actualmente en vista previa.
Warehouse y el punto de conexión de análisis de SQL admiten las funciones de expresión regular escalar. Cada una de estas funciones devuelve un valor por fila de entrada, por lo que puedes usarlas en las expresiones SELECT, WHERE, JOIN, GROUP BY, ORDER BY y CASE.
Note
Solo están disponibles funciones de expresión regular escalar en Warehouse. Las funciones con valores de tabla REGEXP_MATCHES y REGEXP_SPLIT_TO_TABLE no están soportadas.
Funciones compatibles
| Function | Tipo de retorno | Description |
|---|---|---|
| REGEXP_LIKE | Boolean | Indica si la entrada de texto coincide con el patrón regex. Úsalo como predicado, por ejemplo en una cláusula WHERE o una expresión CASE. |
| REGEXP_REPLACE | Expresión de cadena | Devuelve la cadena fuente con las ocurrencias del patrón regex reemplazadas por una cadena de reemplazo. Si no se encuentran coincidencias, devuelve la cadena original. |
| REGEXP_SUBSTR | Expresión de cadena | Devuelve la naparición de una subcadena que coincide con el patrón regex. |
| REGEXP_INSTR | int |
Devuelve la posición inicial o final de la subcadena emparejada. |
| REGEXP_COUNT | int |
Devuelve el número de veces que el patrón regex aparece en una cadena. |
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 una descripción completa de cada argumento, véase la referencia de la función enlazada en Funciones soportadas.
Flags
El argumento opcional flags es un valor char o varchar de hasta 30 caracteres que establece los modificadores correspondientes. Si pones banderas contradictorias, gana la última. Por ejemplo, 'ic' resulta en emparejamiento sensible a mayúsculas y minúsculas.
| Flag | Description |
|---|---|
c |
Coincidencia con distinción entre mayúsculas y minúsculas. Este es el valor predeterminado. |
i |
Coincidencia sin distinción entre mayúsculas y minúsculas. |
m |
Modo de varias líneas: ^ y $ coinciden con el principio y el final de cada línea, además del principio y el final del texto. |
s |
Permite que . coincida con el carácter \n de nueva línea. |
Considerations
- El
string_expressionargumento acepta tipos de cadenas de caracteres. Se admiten valores grandes (varchar(max)) hasta 2 MB. - El argumento
pattern_expressionadmite una longitud máxima de 8.000 bytes. - Las funciones de expresión regular no respetan las reglas de intercalación. El emparejamiento puede diferir de otras comparaciones de cadenas, como
LIKE. Para controlar la sensibilidad a mayúsculas y minúsculas, utiliza las banderasiycen lugar de depender del cotejamiento de la columna. Para obtener más información, vea intercalación de almacén de datos. -
REGEXP_LIKEdevuelve un valor booleano y no puede devolverse directamente como columna. Para devolver el resultado como columna, envuélvelo en unaCASEexpresión.
Examples
Los siguientes ejemplos utilizan un pequeño conjunto de datos insertado, así que puedes ejecutarlos en cualquier almacén o endpoint de analítica SQL.
A. Filtra las filas que coincidan con un patrón
Usa REGEXP_LIKE en una WHERE cláusula para devolver solo filas con un formato de correo electrónico 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 el resultado de coincidencia como una columna, envuelva REGEXP_LIKE en una expresión 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. Extraer un valor del texto
Use REGEXP_SUBSTR para extraer el primer número de pedido en el formato ORD- seguido de dígitos de un comentario en texto libre.
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 extraer solo parte de la coincidencia, utiliza un grupo de captura. La siguiente consulta devuelve el dominio de cada dirección de correo electrónico:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Contar las coincidencias de patrones
Usa REGEXP_COUNT para contar cuántos números aparecen en cada cadena.
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. Encuentra la posición de una coincidencia
Use REGEXP_INSTR para encontrar la posición inicial y la posición final de la primera secuencia 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. Limpieza y enmascaramiento de datos
Usa REGEXP_REPLACE para estandarizar números de teléfono con grupos de captura y para enmascarar todos menos los cuatro últimos 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);
La siguiente consulta colapsa el espacio en blanco repetido en un solo espacio:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Agrupar y agregar por un valor extraído
Como las funciones son escalares, puedes usarlas en cláusulas GROUP BY. La siguiente consulta cuenta los clientes por dominio de correo electrónico.
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));