적용 대상: Microsoft Fabric의 SQL Server 2025(17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 데이터베이스
정규식 패턴이 문자열에서 일치하는지 나타냅니다.
REGEXP_LIKE
(
string_expression,
pattern_expression [ , flags ]
)
REGEXP_LIKE 에는 데이터베이스 호환성 수준 170 이상이 필요합니다. 데이터베이스 호환성 수준이 170 REGEXP_LIKE 보다 낮으면 사용할 수 없습니다. 다른 정규식 스칼라 함수는 모든 호환성 수준에서 사용할 수 있습니다.
뷰 또는 데이터베이스 속성에서 sys.databases 호환성 수준을 확인할 수 있습니다. 다음 명령을 사용하여 데이터베이스의 호환성 수준을 변경할 수 있습니다.
ALTER DATABASE [DatabaseName]
SET COMPATIBILITY_LEVEL = 170;
Note
정규식은 SQL Server 2025 또는 Always-up-to-date업데이트 정책을 사용하여 Azure SQL Managed Instance에서 사용할 수 있습니다.
Arguments
string_expression
문자열의 식입니다.
문자열의 상수, 변수 또는 열일 수 있습니다.
데이터 형식: char, nchar, varchar 또는 nvarchar.
Note
, REGEXP_LIKE및 REGEXP_COUNT 함수는 REGEXP_INSTRstring_expression 매개 변수에 대해 LOB 형식(varchar(max) 및 nvarchar(max))을 최대 2MB까지 지원합니다.
pattern_expression
일치시킬 정규식 패턴입니다. 일반적으로 텍스트 리터럴입니다.
데이터 형식: char, nchar, varchar 또는 nvarchar. pattern_expression 최대 문자 길이는 8,000바이트입니다.
flags
일치 항목을 검색하는 데 사용되는 한정자를 지정하는 하나 이상의 문자입니다. varchar 또는 char 형식이며 최대 30자입니다.
예: ims. 기본값은 c입니다. 빈 문자열 (' ') 이 제공되면 기본값 ('c')으로 처리됩니다. 또는 다른 문자 식을 제공합니다 c . 플래그에 모순된 문자가 여러 개 있는 경우 SQL Server는 마지막 문자를 사용합니다.
예를 들어 regex를 지정 ic 하면 대/소문자를 구분하는 일치 항목이 반환됩니다.
값에 지원되는 플래그 값에 나열된 문자가 아닌 문자가 포함된 경우 쿼리는 다음 예제와 같은 오류를 반환합니다.
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
지원되는 플래그 값
| Flag | Description |
|---|---|
i |
대/소문자를 구분하지 않습니다(기본값 false) |
m |
여러 줄 모드: ^$ 시작/끝 텍스트 외에 시작/끝 선 일치(기본값 false) |
s |
일치 . 허용\n(기본값false) |
c |
대/소문자 구분(기본값 true) |
반환 값
부울 값입니다.
true 또는 false.
Remarks
카디널리티 예측
함수의 REGEXP_LIKE기수 추정 정확도를 높이기 위해 와 ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP 쿼리 힌트를 사용하여 ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP 기본 선택도 값을 조정합니다. 자세한 내용은 쿼리 힌트를 참조하세요.
이 쿼리 힌트는 또한 기수 추정(CE) 피드백과도 통합됩니다. CE 피드백 모델은 추정 행 수와 실제 행 수 사이에 유의미한 차이가 있는 함수를 사용하는 REGEXP_LIKE 쿼리를 자동으로 식별합니다. 그런 다음, 수동 입력 없이도 계획 품질을 개선하기 위해 쿼리 수준에서 적절한 선택성 힌트를 적용합니다.
자동 피드백 동작을 사용하지 않도록 설정하려면 추적 플래그 16268을 사용하도록 설정합니다.
Examples
이름이 다음으로 Y시작 A 하고 끝나는 모든 기록을 표에서 선택하세요Employees:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$');
이름이 처음부터 A 끝나는 Y표에서 대소문자 구분 모드를 사용해 모든 레코드를 선택하세요Employees:
SELECT *
FROM Employees
WHERE REGEXP_LIKE (FIRST_NAME, '^A.*Y$', 'i');
주문 날짜가 Orders 2020년 2월인 테이블에서 모든 레코드를 선택합니다.
SELECT *
FROM Orders
WHERE REGEXP_LIKE (ORDER_DATE, '2020-02-\d\d');
제품 이름에 Products 3개 이상의 연속 모음이 포함된 테이블에서 모든 레코드를 선택합니다.
SELECT *
FROM Products
WHERE REGEXP_LIKE (PRODUCT_NAME, '[AEIOU]{3,}');
와 Phone_Number 열에 Email 대한 제약 조건을 가진 CHECK 직원 테이블을 만드세요:
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})$'))
);