Delen via


preview van REGEXP_LIKE (Transact-SQL)

Van toepassing op: SQL Server 2025 (17.x) Preview AzureSQL Database Azure SQL Managed InstanceSQL-databasein Microsoft Fabric Preview

Note

Als preview-functie is de technologie die in dit artikel wordt gepresenteerd, onderworpen aan aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews.

Geeft aan of het reguliere expressiepatroon overeenkomt met een tekenreeks.

REGEXP_LIKE
     (
      string_expression,
      pattern_expression [, flags ]
     )

REGEXP_LIKE vereist databasecompatibiliteitsniveau 170 en hoger. Als het compatibiliteitsniveau van de database lager is dan 170, REGEXP_LIKE is deze niet beschikbaar. Andere scalaire functies voor reguliere expressies zijn beschikbaar op alle compatibiliteitsniveaus.

U kunt het compatibiliteitsniveau controleren in de sys.databases weergave of in database-eigenschappen. U kunt het compatibiliteitsniveau van een database wijzigen met de volgende opdracht:

ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 170;

Note

Reguliere expressies zijn beschikbaar in Azure SQL Managed Instance met het sql Server 2025- of Always-up-to-datumupdatebeleid.

Arguments

string_expression

Een expressie van een tekenreeks.

Dit kan een constante, variabele of kolom van tekenreeks zijn.

Gegevenstypen: teken, nchar, varcharof nvarchar.

Note

De REGEXP_LIKEfuncties , REGEXP_COUNTen REGEXP_INSTR functies ondersteunen LOB-typen (varchar(max) en nvarchar(max)) tot 2 MB voor de parameter string_expression .

pattern_expression

Patroon voor reguliere expressies dat overeenkomt. Meestal een letterlijke tekst.

Gegevenstypen: teken, nchar, varcharof nvarchar. pattern_expression ondersteunt een maximale tekenlengte van 8.000 bytes.

flags

Een of meer tekens die de modifiers opgeven die worden gebruikt voor het zoeken naar overeenkomsten. Het type is varchar of teken, met maximaal 30 tekens.

Bijvoorbeeld ims. De standaardwaarde is c. Als er een lege tekenreeks wordt opgegeven (' '), wordt deze behandeld als de standaardwaarde ('c'). Geef c of andere tekenexpressies op. Als de vlag meerdere tegenstrijdige tekens bevat, gebruikt SQL Server het laatste teken.

Als u bijvoorbeeld opgeeft ic de regex hoofdlettergevoelige overeenkomsten retourneert.

Als de waarde een ander teken bevat dan de waarden in Ondersteunde vlagwaarden, retourneert de query een fout zoals in het volgende voorbeeld:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Ondersteunde vlagwaarden
Flag Description
i Hoofdlettergevoelig (standaard false)
m Modus met meerdere regels: ^ en $ begin-/eindregel vergelijken naast begin-/eindtekst (standaard false)
s Laten . overeenkomen \n (standaard false)
c Hoofdlettergevoelig (standaard true)

Retourwaarde

Booleaanse waarde. true of false.

Remarks

Kardinaliteitsraming

Als u de nauwkeurigheid van de kardinaliteitschatting voor de REGEXP_LIKE functie wilt verbeteren, kunt u de ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP hints en ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP query's gebruiken om de standaardselectiviteitswaarden aan te passen. Zie queryhintsvoor meer informatie.

Deze queryhints zijn ook geïntegreerd met feedback van Kardinaliteitschatting (CE). Het CE-feedbackmodel identificeert automatisch query's met behulp van REGEXP_LIKE een functie, waarbij er een aanzienlijk verschil is tussen geschatte en werkelijke aantal rijen. Vervolgens wordt de juiste selectiviteitshint op queryniveau toegepast om de kwaliteit van het plan te verbeteren zonder handmatige invoer.

Als u het gedrag van automatische feedback wilt uitschakelen, schakelt u traceringsvlag 16268 in.

Examples

Selecteer alle records in de Employees tabel waarin de voornaam begint met A en eindigt met Y

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

Selecteer alle records in de Orders tabel waarin de orderdatum zich in februari 2020 bevindt:

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

Selecteer alle records in de Products tabel waarin de productnaam ten minste drie opeenvolgende klinkers bevat:

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

Tabel Werknemers maken met CHECK beperkingen voor Email en Phone_Number kolommen:

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})$'))
);