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