적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 웨어하우스
Microsoft Fabric의 SQL 데이터베이스
모든 유효한 텍스트 및 문자 데이터 형식에서 지정된 식에서 패턴이 처음 나타나는 시작 위치를 반환하거나 패턴을 찾을 수 없는 경우 0을 반환합니다.
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
pattern
찾을 시퀀스가 포함된 문자 식입니다. 와일드카드 캐릭터를 사용할 수 있으며; 하지만 % 문자는 앞에 오고 패턴 을 따라야 합니다(첫 문자나 마지막 문자를 검색할 때는 제외). 패턴 은 문자 문자열 데이터 타입 범주의 표현식입니다. 패턴 은 8,000자로 제한됩니다.
Note
기존 정규식은 SQL Server 2022(16.x) 및 이전 버전에서 기본적으로 지원되지 않지만 다양한 와일드카드 식을 사용하여 비슷한 복합 패턴 일치를 달성할 수 있습니다. 와일드카드 문법에 대한 자세한 내용은 String operators 문서를 참조하세요. SQL Server 2025 (17.x)의 정규 표현식 함수에 대한 정보는 정규 표현식 함수를 참조하세요.
expression
일반적으로 지정된 패턴을 검색하는 열의 표현식입니다. 표현 식은 문자 문자열 데이터 타입 범주에 속합니다.
반환 형식
Bigint는 표현식이 varchar(max) 또는 nvarchar(max) 데이터 타입일 경우 사용; 그렇지 않으면 지능.
Remarks
패턴이 이면 NULL, PATINDEX 를 반환한다NULL.
식이 NULLPATINDEX 면 오류를 반환합니다.
시작 위치 PATINDEX 는 .입니다 1.
PATINDEX 는 입력의 데이터 정렬을 기반으로 비교를 수행합니다. 지정된 데이터 정렬에서 비교를 수행하려면 입력에 명시적 데이터 정렬을 적용하는 데 사용할 COLLATE 수 있습니다.
보조 문자(서로게이트 쌍)
보조 문자(SC)를 포함한 콜레이션을 사용할 때, 반환 값은 표현 식 매개변수 내 UTF-16 서로게이트 쌍을 하나의 문자로 간주합니다. 자세한 내용은 데이터 정렬 및 유니코드 지원을 참조하십시오.
0x0000 (char(0))는 Windows 데이터 정렬에서 정의되지 않은 문자이며 에 포함 PATINDEX할 수 없습니다.
Examples
A. 기본 PATINDEX 예제
다음 예는 짧은 문자열(interesting data)에서 ter 문자의 시작 위치를 검사합니다.
SELECT PATINDEX('%ter%', 'interesting data') AS position;
결과 집합은 다음과 같습니다.
position
--------
3
B. PATINDEX에서 패턴 사용
다음 예시는 AdventureWorks2025 데이터베이스의 테이블 열 Document 의 DocumentSummary 특정 행에서 패턴 ensure 이 시작되는 위치를 찾습니다.
SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
결과 집합은 다음과 같습니다.
position
--------
64
절을 사용하여 WHERE 검색할 행을 제한하지 않으면 쿼리는 테이블의 모든 행을 반환하고 패턴이 발견된 행에 대해 0이 아닌 값을 보고하고 패턴을 찾을 수 없는 모든 행에 대해 0을 보고합니다.
C. PATINDEX에서 와일드카드 문자 사용
다음 예에서는 % 및 와일드카드를 사용하여 지정된 문자열에서 하나의 문자 및 'en'가 뒤에 오는 'ure' 패턴이 시작하는 위치를 찾습니다(인덱스가 1에서 시작함).
SELECT PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;
결과 집합은 다음과 같습니다.
position
--------
8
PATINDEX는 LIKE와 동일하게 작동하므로 와일드카드 중 하나를 사용할 수 있습니다. 백분율 사이에 패턴을 묶을 필요가 없습니다.
PATINDEX('a%', 'abc')는 1을 반환하고, PATINDEX('%a', 'cba')는 3을 반환합니다.
LIKE와 달리 PATINDEX는 위치를 반환하는데, 이는 CHARINDEX와 유사합니다.
D. PATINDEX에서 복잡한 와일드카드 식 사용
다음 예시는 [^] 사용하여 숫자, 문자, 공백이 아닌 문자의 위치를 찾습니다.
SELECT PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;
결과 집합은 다음과 같습니다.
position
--------
33
E. PATINDEX에서 COLLATE 사용
다음 예에서는 COLLATE 함수를 사용하여 검색된 식의 데이터 정렬을 명시적으로 지정합니다.
USE tempdb;
GO
SELECT PATINDEX('%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN);
GO
결과 집합은 다음과 같습니다.
position
--------
9
F. 변수를 사용하여 패턴 지정
다음 예시는 패턴 매개변수에 값을 전달하는 변수를 사용합니다. 이 예시는 AdventureWorks2025 데이터베이스를 사용합니다.
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
결과 집합은 다음과 같습니다.
position
--------
22