Compartir a través de


REGEXP_LIKE (Transact-SQL)

Se aplica a: SQL Server 2025 (17.x) Base de datos SQL de Azure SQL Database deAzure SQL Managed Instanceen Microsoft Fabric

Indica si el patrón de expresión regular coincide en una cadena.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE requiere el nivel de compatibilidad de la base de datos 170 y versiones posteriores. Si el nivel de compatibilidad de la base de datos es inferior a 170, REGEXP_LIKE no está disponible. Otras funciones escalares de expresiones regulares están disponibles en todos los niveles de compatibilidad.

Puede comprobar el nivel de compatibilidad en la vista o en las propiedades de la sys.databases base de datos. Puede cambiar el nivel de compatibilidad de una base de datos con el siguiente comando:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

Las expresiones regulares están disponibles en Instancia administrada de Azure SQL con sql Server 2025 o la directiva de actualizaciónalways-up-to-date.

Arguments

string_expression

Expresión de una cadena de caracteres.

Puede ser una constante, variable o columna de cadena de caracteres.

Tipos de datos: char, nchar, varcharo nvarchar.

Note

Las REGEXP_LIKEfunciones , REGEXP_COUNTy REGEXP_INSTR admiten tipos loB (varchar(max) y nvarchar(max)) hasta 2 MB para el parámetro string_expression .

pattern_expression

Patrón de expresión regular que debe coincidir. Normalmente, un literal de texto.

Tipos de datos: char, nchar, varcharo nvarchar. pattern_expression admite una longitud máxima de caracteres de 8000 bytes.

flags

Uno o varios caracteres que especifican los modificadores usados para buscar coincidencias. El tipo es varchar o char, con un máximo de 30 caracteres.

Por ejemplo, ims. El valor predeterminado es c. Si se proporciona una cadena vacía (' '), se tratará como el valor predeterminado ('c'). Proporcione c o cualquier otra expresión de caracteres. Si la marca contiene varios caracteres contradictorios, SQL Server usa el último carácter.

Por ejemplo, si especifica ic la expresión regular devuelve coincidencias que distinguen mayúsculas de minúsculas.

Si el valor contiene un carácter distinto de los enumerados en Valores de marca admitidos, la consulta devuelve un error como el ejemplo siguiente:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Valores de marca admitidos
Flag Description
i No distingue mayúsculas de minúsculas (valor predeterminado false)
m Modo de varias líneas: ^ y $ coinciden con la línea de inicio y finalización, además del texto de inicio y finalización (valor predeterminado false)
s Permitir que . coincida \n (valor predeterminado false)
c Distingue mayúsculas de minúsculas (valor predeterminado true)

Valor devuelto

Valor booleano. true o false.

Remarks

Estimación de cardinalidad

Para mejorar la precisión de la estimación de cardinalidad de la REGEXP_LIKE función, utiliza las ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP pistas de y ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP query para ajustar los valores de selectividad por defecto. Para obtener más información, consulte Sugerencias de consulta.

Estas pistas de consulta también se integran con la retroalimentación de estimación de cardinalidad (CE). El modelo de retroalimentación de CE identifica automáticamente las consultas que usan la REGEXP_LIKE función donde hay una diferencia significativa entre el número estimado y el número real de filas. A continuación, aplica la sugerencia de selectividad adecuada en el nivel de consulta para mejorar la calidad del plan sin necesidad de entrada manual.

Para deshabilitar el comportamiento de comentarios automáticos, habilite la marca de seguimiento 16268.

Examples

Selecciona todos los registros de la Employees tabla donde el nombre comienza A y termina con Y:

SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');

Selecciona todos los registros de la Employees tabla donde el nombre comienza y A termina en Y, usando el modo insensible a mayúsculas:

SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$', 'i');

Seleccione todos los registros de la Orders tabla donde se encuentra la fecha de pedido en febrero de 2020:

SELECT *
FROM Orders
WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');

Seleccione todos los registros de la Products tabla donde el nombre del producto contiene al menos tres vocales consecutivas:

SELECT *
FROM Products
WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');

Crea una tabla de empleados con CHECK restricciones para las Email columnas y Phone_Number de :

DROP TABLE IF EXISTS Employees;
CREATE TABLE Employees
(
    ID INT IDENTITY (101, 1),
    [Name] VARCHAR (150),
    Email VARCHAR (320)
        CHECK (REGEXP_LIKE (Email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')),
    Phone_Number NVARCHAR (20)
        CHECK (REGEXP_LIKE (Phone_Number, '^(\d{3})-(\d{3})-(\d{4})$'))
);