Aracılığıyla paylaş


REGEXP_LIKE (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2025 (17.x) Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

Normal ifade deseninin bir dizede eşleşip eşleşmediğini gösterir.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE veritabanı uyumluluk düzeyi 170 ve üzerini gerektirir. Veritabanı uyumluluk düzeyi 170'ten düşükse kullanılamaz REGEXP_LIKE . Diğer normal ifade skaler işlevleri tüm uyumluluk düzeylerinde kullanılabilir.

Uyumluluk düzeyini görünümde sys.databases veya veritabanı özelliklerinde de kontrol edebilirsiniz. Aşağıdaki komutla veritabanının uyumluluk düzeyini değiştirebilirsiniz:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

Normal ifadeler Azure SQL Yönetilen Örneği'nde SQL Server 2025 veya Always-up-to-dategüncelleştirme ilkesiyle kullanılabilir.

Arguments

string_expression

Karakter dizesinin ifadesi.

Sabit, değişken veya karakter dizesi sütunu olabilir.

Veri türleri: char, nchar, varchar veya nvarchar.

Note

REGEXP_LIKE, REGEXP_COUNTve REGEXP_INSTR işlevleri, string_expression parametresi için 2 MB'a kadar LOB türlerini (varchar(max) ve nvarchar(max)) destekler.

pattern_expression

Eşleşecek normal ifade deseni. Genellikle bir metin değişmez değeridir.

Veri türleri: char, nchar, varchar veya nvarchar. pattern_expression en fazla 8.000 bayt karakter uzunluğunu destekler.

flags

Eşleşmeleri aramak için kullanılan değiştiricileri belirten bir veya daha fazla karakter. Tür, en fazla 30 karakter içeren varchar veya char'tır.

Örneğin, ims. Varsayılan değer: c. Boş bir dize (' ') sağlanırsa, varsayılan değer ('c')olarak değerlendirilir. Veya c diğer karakter ifadelerini sağlayın. Bayrak birden çok çelişkili karakter içeriyorsa, SQL Server son karakteri kullanır.

Örneğin, regex değerini belirtirseniz ic büyük/küçük harfe duyarlı eşleştirme döndürür.

Değer , Desteklenen bayrak değerleri'nde listelenenlerden farklı bir karakter içeriyorsa, sorgu aşağıdaki örneğe benzer bir hata döndürür:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Desteklenen bayrak değerleri
Flag Description
i Büyük/küçük harfe duyarlı değil (varsayılan false)
m Çok satırlı mod: ^ ve $ başlangıç/bitiş metnine ek olarak başlangıç/bitiş satırını eşleştir (varsayılan false)
s Eşleşmeye . izin ver \n (varsayılan false)
c Büyük/küçük harfe duyarlı (varsayılan true)

Dönüş değeri

Boole değeri. true veya false.

Remarks

Kardinalite tahmini

Fonksiyon için kardinalite tahminininREGEXP_LIKE doğruluğunu artırmak için, ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP ve ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP sorgu ipuçlarını kullanarak varsayılan seçicilik değerlerini ayarlayabilirsiniz. Daha fazla bilgi için bkz.sorgu ipuçları .

Bu sorgu ipuçları ayrıca Kardinalite tahmini (CE) geri bildirimiyle entegre olur. CE geri bildirim modeli, tahmini ve gerçek satır sayısı arasında önemli fark olduğu durumlarda fonksiyonu REGEXP_LIKE kullanan sorguları otomatik olarak belirler. Ardından, el ile giriş gerektirmeden plan kalitesini geliştirmek için sorgu düzeyinde uygun seçicilik ipucunu uygular.

Otomatik geri bildirim davranışını devre dışı bırakmak için izleme bayrağı 16268'i etkinleştirin.

Examples

Tablodan tüm kayıtları Employees seçin; burada ilk ad ile A başlar ve sona Yerer:

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

Tablodaki tüm kayıtları, ilk adın ile A başladığı ve bittiği Yyerde, küçük küçük harf duyarsız modda seçinEmployees:

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

Sipariş tarihinin Şubat 2020'de olduğu tablodan tüm kayıtları Orders seçin:

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

Ürün adının en az üç ardışık sesli harf içerdiği tablodan tüm kayıtları Products seçin:

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

ve Phone_Number sütunları için Email kısıtlamalarla bir çalışan tablosu CHECK oluşturun:

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