Bagikan melalui


REGEXP_LIKE (Transact-SQL)

Berlaku untuk: Database SQL SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed Instancedi Microsoft Fabric

Menunjukkan apakah pola ekspresi reguler cocok dalam string.

REGEXP_LIKE
(
    string_expression,
    pattern_expression [ , flags ]
)

REGEXP_LIKE memerlukan tingkat kompatibilitas database 170 ke atas. Jika tingkat kompatibilitas database lebih rendah dari 170, REGEXP_LIKE tidak tersedia. Fungsi skalar ekspresi reguler lainnya tersedia di semua tingkat kompatibilitas.

Anda dapat memeriksa tingkat kompatibilitas dalam sys.databases tampilan atau di properti database. Anda bisa mengubah tingkat kompatibilitas database dengan perintah berikut:

ALTER DATABASE [DatabaseName]
    SET COMPATIBILITY_LEVEL = 170;

Note

Ekspresi reguler tersedia di Azure SQL Managed Instance dengan kebijakan pembaruanSQL Server 2025 atau Always-up-to-date.

Arguments

string_expression

Ekspresi string karakter.

Bisa berupa konstanta, variabel, atau kolom string karakter.

Jenis data: karakter, nchar, varchar , atau nvarchar.

Note

Fungsi REGEXP_LIKE, REGEXP_COUNT, dan REGEXP_INSTR mendukung jenis LOB (varchar(max) dan nvarchar(max)) hingga 2 MB untuk parameter string_expression .

pattern_expression

Pola ekspresi reguler untuk dicocokkan. Biasanya teks harfiah.

Jenis data: karakter, nchar, varchar , atau nvarchar. pattern_expression mendukung panjang karakter maksimum 8.000 byte.

flags

Satu atau beberapa karakter yang menentukan pengubah yang digunakan untuk mencari kecocokan. Jenisnya varchar atau karakter, dengan maksimum 30 karakter.

Misalnya, ims. Defaultnya adalah c. Jika string kosong (' ') disediakan, string tersebut akan diperlakukan sebagai nilai default ('c'). Berikan c atau ekspresi karakter lainnya. Jika bendera berisi beberapa karakter kontradiktif, maka SQL Server menggunakan karakter terakhir.

Misalnya, jika Anda menentukan ic regex mengembalikan pencocokan peka huruf besar/kecil.

Jika nilai berisi karakter selain yang tercantum di Nilai bendera yang didukung, kueri mengembalikan kesalahan seperti contoh berikut:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
Nilai bendera yang didukung
Flag Description
i Tidak peka huruf besar/kecil (default false)
m Mode multibaris: ^ dan $ cocokkan baris awal/akhir selain teks awal/akhir (default false)
s Biarkan . cocok \n (default false)
c Peka huruf besar/kecil (default true)

Mengembalikan nilai

Nilai Boolean. true atau false.

Remarks

Estimasi kardinalitas

Untuk meningkatkan akurasi estimasi kardinalitas untuk REGEXP_LIKE fungsi, gunakan ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP petunjuk kueri dan ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP untuk menyesuaikan nilai selektivitas default. Untuk informasi selengkapnya, lihat petunjuk Kueri .

Petunjuk kueri ini juga terintegrasi dengan umpan balik estimasi Kardinalitas (CE). Model umpan balik CE secara otomatis mengidentifikasi kueri yang menggunakan fungsi di REGEXP_LIKE mana ada perbedaan signifikan antara jumlah baris perkiraan dan aktual. Kemudian menerapkan petunjuk selektivitas yang sesuai pada tingkat kueri untuk meningkatkan kualitas rencana tanpa memerlukan input manual.

Untuk menonaktifkan perilaku umpan balik otomatis, aktifkan bendera pelacakan 16268.

Examples

Pilih semua catatan dari Employees tabel di mana nama depan dimulai dengan A dan diakhiri dengan Y:

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

Pilih semua rekaman dari tabel tempat nama depan dimulai dengan A dan diakhiri dengan Y, menggunakan mode tidak peka huruf besar/kecil:Employees

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

Pilih semua rekaman dari Orders tabel tempat tanggal pesanan pada Bulan Februari 2020:

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

Pilih semua rekaman dari Products tabel di mana nama produk berisi setidaknya tiga vokal berturut-turut:

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

Buat tabel karyawan dengan CHECK batasan untuk Email kolom dan 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})$'))
);