다음을 통해 공유


REGEXP_LIKE(Transact-SQL) 미리 보기

적용 대상: SQL Server 2025(17.x)Microsoft Fabric에서Azure SQL DatabaseAzure SQL Managed Instance SQL 데이터베이스 미리 보기

비고

미리 보기 기능으로, 이 문서에 제시된 기술에는 Microsoft Azure 프리뷰에 대한 보충 사용 약관이 적용됩니다.

정규식 패턴이 문자열에서 일치하는지 나타냅니다.

REGEXP_LIKE 
     (
      string_expression,
      pattern_expression [, flags ]
     )

REGEXP_LIKE 에는 데이터베이스 호환성 수준 170 이상이 필요합니다. 데이터베이스 호환성 수준이 170 REGEXP_LIKE 보다 낮으면 사용할 수 없습니다. 다른 정규식 스칼라 함수는 모든 호환성 수준에서 사용할 수 있습니다.

뷰 또는 데이터베이스 속성에서 sys.databases 호환성 수준을 확인할 수 있습니다. 다음 명령을 사용하여 데이터베이스의 호환성 수준을 변경할 수 있습니다.

ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 170;

주장들

string_expression

문자열의 식입니다.

문자열의 상수, 변수 또는 열일 수 있습니다.

데이터 형식: char, nchar, varchar 또는 nvarchar.

비고

, REGEXP_LIKEREGEXP_COUNT 함수는 REGEXP_INSTRstring_expression 매개 변수에 대해 LOB 형식(varchar(max)nvarchar(max))을 최대 2MB까지 지원합니다.

패턴_표현식

일치시킬 정규식 패턴입니다. 일반적으로 텍스트 리터럴입니다.

데이터 형식: char, nchar, varchar 또는 nvarchar. pattern_expression 최대 문자 길이는 8,000바이트입니다.

플래그

일치 항목을 검색하는 데 사용되는 한정자를 지정하는 하나 이상의 문자입니다. 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.
지원되는 플래그 값
깃발 설명
i 대/소문자를 구분하지 않습니다(기본값 false)
m 여러 줄 모드: ^$ 시작/끝 텍스트 외에 시작/끝 선 일치(기본값 false)
s 일치 . 허용\n(기본값false)
c 대/소문자 구분(기본값 true)

반환 값

부울 값입니다. true 또는 false.

비고

함수에 대한 REGEXP_LIKE의 정확도를 높이기 위해 쿼리 힌트를 ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP 사용하여 ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP 기본 선택성 값을 조정할 수 있습니다. 자세한 내용은 쿼리 힌트를 참조하세요.

이러한 쿼리 힌트는 CE(카디널리티 추정) 피드백과도 통합됩니다. CE 피드백 모델은 예상 행 수와 실제 행 수 사이에 상당한 차이가 있는 함수를 사용하여 REGEXP_LIKE 쿼리를 자동으로 식별합니다. 그런 다음, 수동 입력 없이도 계획 품질을 개선하기 위해 쿼리 수준에서 적절한 선택성 힌트를 적용합니다.

이 자동 피드백 기반 동작을 사용하지 않도록 설정하려면 추적 플래그 16268을 사용하도록 설정합니다.

예시

이름이 시작 EMPLOYEES 되고 A로 끝나는 테이블에서 모든 레코드를 선택합니다.Y

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

주문 날짜가 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,}'); 

열에 CHECK 대한 Email 제약 조건이 있는 Phone_Number Employees 테이블을 만듭니다.

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