REGEXP_LIKE (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Azure SQL-Datenbank AzureSQL Managed InstanceSQL SQL-Datenbank in Microsoft Fabric

Gibt an, ob das Muster für reguläre Ausdrücke in einer Zeichenfolge übereinstimmt.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE erfordert Datenbankkompatibilitätsebene 170 und höher. Wenn die Datenbankkompatibilitätsebene niedriger als 170 ist, REGEXP_LIKE ist sie nicht verfügbar. Andere skalare Funktionen für reguläre Ausdrücke sind auf allen Kompatibilitätsebenen verfügbar.

Sie können die Kompatibilitätsebene in der sys.databases Ansicht oder in Datenbankeigenschaften überprüfen. Sie können die Kompatibilitätsebene einer Datenbank mit dem folgenden Befehl ändern:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

Reguläre Ausdrücke sind in azure SQL Managed Instance mit der SQL Server 2025- oder Always-up-to-Datumsaktualisierungsrichtlinie verfügbar.

Arguments

string_expression

Ein Ausdruck einer Zeichenfolge.

Dabei kann es sich um eine Konstante, Variable oder Spalte von Zeichenfolgen handeln.

Datentypen: Char, nchar, varcharoder nvarchar.

Note

Die Funktionen REGEXP_* unterstützen LOB-Typen (varchar(max) und nvarchar(max)) bis zu 2 MB für den string_expression-Parameter .

pattern_expression

Muster für reguläre Ausdrücke, das übereinstimmen soll. In der Regel ein Textliteral.

Datentypen: Char, nchar, varcharoder nvarchar. pattern_expression unterstützt eine maximale Zeichenlänge von 8.000 Byte.

flags

Mindestens ein Zeichen, das die Modifizierer für die Suche nach Übereinstimmungen angibt. Der Typ ist varchar oder Zeichenmit maximal 30 Zeichen.

Beispiel: ims. Der Standardwert ist c. Wenn eine leere Zeichenfolge (' ') angegeben wird, wird sie als Standardwert ('c')behandelt. Geben Sie c oder andere Zeichenausdrücke an. Wenn das Kennzeichen mehrere widersprüchliche Zeichen enthält, verwendet SQL Server das letzte Zeichen.

Wenn Sie z. B. angeben, ic der regex-Wert den Abgleich zwischen Groß- und Kleinschreibung zurückgibt.

Wenn der Wert ein anderes Zeichen als die unter unterstützten Flagwerteenthält, gibt die Abfrage einen Fehler wie im folgenden Beispiel zurück:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Unterstützte Flagwerte
Flag Description
i Groß-/Kleinschreibung wird nicht beachtet (Standard false)
m Mehrzeiligen Modus: ^ und $ Zuordnen der Anfangs-/Endzeile zusätzlich zum Anfangs-/Endtext (Standard false)
s Übereinstimmung . zulassen \n (Standardfalse)
c Groß-/Kleinschreibung beachten (Standard true)

Rückgabewert

Boolescher Wert. true oder false.

Remarks

Kardinalitätsschätzung

Um die Genauigkeit der Kardinalitätsschätzung für die REGEXP_LIKE Funktion zu erhöhen, verwenden Sie die ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP und ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP Abfragehinweise, um die Standardselektivitätswerte anzupassen. Weitere Informationen finden Sie unter Abfragehinweise.

Diese Abfragehinweise integrieren sich auch mit dem Feedback zur Kardinalitätsschätzung (CE). Das CE-Feedback-Modell identifiziert automatisch Abfragen, die die REGEXP_LIKE Funktion verwenden, bei denen ein signifikanter Unterschied zwischen geschätzter und tatsächlicher Zeilenzahl besteht. Anschließend wird der entsprechende Auswahlhinweis auf Abfrageebene angewendet, um die Planqualität zu verbessern, ohne dass manuelle Eingaben erforderlich sind.

Aktivieren Sie zum Deaktivieren des automatischen Feedbackverhaltens das Ablaufverfolgungskennzeichnung 16268.

SARGable-Musterunterstützung

REGEXP_LIKE ist nur SARG-fähig , wenn das Muster mit dem Anker ^beginnt. Zusätzlich kann das verankerte Muster Folgendes umfassen:

  • Ein Quantor: *, +, , ?, {n}, {n,}, oder {n,m}. Zum Beispiel: ^ab+ oder ^ab*.
  • Reichweitenzeichen wie [0-9A-Za-z].

Um einem Metacharakter zu entkommen, benutze den Backslash (\).

Diese Bedingungen erlauben es dem Abfrageoptimierer, Indexsuchoperationen zu verwenden, um die Abfrageleistung zu verbessern.

Reguläre Ausdrücke respektieren keine Sortierungsregeln. Ihr Verhalten kann sich von anderen String-Vergleichsfunktionen unterscheiden, wie zum Beispiel LIKE. Dieser Unterschied ist besonders wichtig bei indexierten Spalten, die sprachspezifische Sortierungen haben.

In der türkischen Sortierung werden z. B. die Zeichen i , die aufgrund sprachspezifischer Regeln eindeutig behandelt und auch bei der Sortierung zwischen Groß- und I Kleinschreibung unterschieden werden. Weitere Informationen finden Sie im Beispiel F. Vergleichen Sie SARGable und nicht SARGable Musterabgleiche mit Turkish Collation.

Note

Der Begriff SARGable in relationalen Datenbanken bezeichnet ein Prädikat, das Search-ARGumentable ist und einen Index verwenden kann, um die Abfrageausführung zu beschleunigen. Weitere Informationen finden Sie in der SQL Server- und Azure SQL-Indexarchitektur und im Entwurfshandbuch.

Examples

A. Werte übereinstimmen, die mit bestimmten Charakteren beginnen und enden

Wählen Sie alle Datensätze aus der Tabelle aus, in der Employees der Vorname mit A beginnt und mit Yendet:

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

B. Führen Sie eine kleinschreibunsensitive Musterübereinstimmung durch

Wählen Sie alle Datensätze aus der Tabelle, in der Employees der Vorname mit A beginnt und mit Yendet, im Groß- und Kleinschreibungsmodus aus:

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

C. Daten mit einem regulären Ausdrucksmuster abgleichen

Wählen Sie alle Datensätze aus der Tabelle aus, in der Orders sich das Bestelldatum im Februar 2020 befindet:

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

D. Wiederholte Zeichenmuster abgleichen

Wählen Sie alle Datensätze aus der Tabelle aus, in der Products der Produktname mindestens drei aufeinander folgende Vokale enthält:

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

E. Erzwingen Sie die Datenvalidierung mit CHECK-Constraints

Erstelle eine Employees-Tabelle mit CHECK Einschränkungen für die Email Spalten und Phone_Number :

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

F. Vergleichen Sie SARGable und nicht-SARGable Musterabgleiche mit der türkischen Kollation

Dieses Beispiel zeigt die Verwendung der REGEXP_LIKE Funktion bei der türkischen Kollation sowohl SARGable als auch nicht-SARGable.

-- Create a temporary table with Turkish collation and and an index
CREATE TABLE #Users
(
    Username NVARCHAR (100) COLLATE Turkish_100_CI_AS_SC_UTF8 NOT NULL,
    INDEX idx_username (Username)
);

-- Insert sample data
INSERT INTO #Users (Username)
VALUES (N'i'), -- lowercase i
       (N'I'), -- uppercase dotless I
       (N'İ'), -- uppercase dotted İ
       (N'abc');

-- SARGable pattern: starts with ^ and uses quantifier
-- This will use index seek if applicable, but REGEXP_LIKE ignores collation
-- So 'i' and 'I' are treated as different characters
SELECT 'SARGable' AS PatternType,
       *
FROM #Users
WHERE REGEXP_LIKE (Username, '^i');

-- Non-SARGable pattern: does not start with ^.
-- REGEXP_LIKE performs full scan, and matches are
-- case-insensitive since 'i' flag is supplied,
-- so both 'i' and 'I' match.
SELECT 'Non-SARGable' AS PatternType,
       *
FROM #Users
WHERE REGEXP_LIKE (Username, 'i', 'i');

-- Cleanup
DROP TABLE #Users;