SQL Server 에서는 t-SQLPATINDEX()
함수를 사용하여 문자열 내에서 패턴을 찾을 수 있습니다. 특히 함수는 문자열 내에서 패턴의 첫 번째 발생 만 반환합니다.이 함수는 두 개의 인수를 허용합니다.
패턴 내에서 와일드 카드 문자를 사용할 수 있습니다.
구문
구문은 다음과 같이 진행됩니다:
PATINDEX ( '%pattern%' , expression )
여기서 pattern 은 찾을 시퀀스를 포함하는 문자 표현식이며 표현식은 검색 할 표현식입니다.
를 들어 1–기본 사용법
의 예는 다음과 같이 어떻게 작동:
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;
결과:
+----------+| Result ||----------|| 12 |+----------+
비율을 등록하십시오(%
)와일드카드 문자를 나타내는 어떤 문자열의 영이나 더 많은 자입니다.
예제 2–일치하지 않음
다음은 와일드 카드 문자를 포함하지 않을 때 발생하는 일입니다:
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;
결과:
+----------+| Result ||----------|| 0 |+----------+
는 경우이지만,전체 문자열의 패턴과 일치하지 않고 어떤 와일드카드는,당신은 경기:
SELECT PATINDEX('Bob', 'Bob') AS Result;
결과:
+----------+| Result ||----------|| 1 |+----------+
그러나,당신이 얻을 수 없는 경기는 경우 문자열이 포함되는 더 많은 문자
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;
결과:
+----------+| Result ||----------|| 0 |+----------+
어떤 경우에는 사용할 수 있는 단일 와일드카드:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;
결과:
+----------+| Result ||----------|| 1 |+----------+
사용할 수도 있습 단일 와일드카드이 어딘가에서의 패턴
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;
결과:
+----------+| Result ||----------|| 1 |+----------+
이 경우 우리는 경기이기 때문에 시작 및 종료 문자열의 일치하는 시작과 끝의 패턴입니다. 물론 다른 모든 문자가 백분율 기호로 덮여 있기 때문에 문자열의 중간도 패턴의 중간과 일치했습니다.
예제 3–밑줄 와일드 카드
다음은 다른 와일드 카드 문자를 소개하는 또 다른 예입니다:
SELECT PATINDEX('B_er', 'Beer') AS Result;
결과:
+----------+| Result ||----------|| 1 |+----------+
밑줄(_
)어떤 와일드카드 하나의 문자입니다. 따라서 해당 위치에 정확히 하나의 문자가있는 경우에만 일치합니다.
물론 위의 패턴은 많은 다른 문자열과 일치 할 수 있습니다. 예:
SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';
결과:
+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+
를 들어 4–을 비교하_____________이며%와일드카드
이 예제의 차이는_
%
와일드카드 문자입니다.
SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';
결과:
+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+
밑줄만 경기가 있을 때는 정확히 하나의 캐릭터에는 위치입니다. 두 문자를 일치 시키려면 두 개의 밑줄을 사용해야합니다. 반면에 백분율 기호는 다음 예제에서 볼 수 있듯이 0 을 포함한 임의의 수의 문자와 일치합니다:
SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';
결과:
+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+
예 5–데이터베이스를 들어
의 예는 다음과 같 이 기능을 사용하여 데이터베이스 쿼리:
USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;
결과:
+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+
이 경우에는 내가 사용하는WHERE
PATINDEX()
WHERE
절을 삭제 한 경우 일치 여부에 관계없이 모든 앨범이 반환되었을 것입니다.
일치하지 않은 사람들의 경우PATINDEX()
결과는 0 이됩니다.
USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;
결과:
+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Powerslave | 0 || Powerage | 0 || Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || Casualties of Cool | 0 || Epicloud | 0 || Somewhere in Time | 0 || Piece of Mind | 0 || Killers | 0 || No Prayer for the Dying | 15 |+-------------------------+-----------------+
예 6–처음 발견만
언급했듯이,PATINDEX()
만 반환합니다 첫 번째 항목의 패턴 내의 문자열입니다.
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;
결과:
+----------+| Result ||----------|| 5 |+----------+
반환한()함수
T-SQLCHARINDEX()
PATINDEX()
PATINDEX()
CHARINDEX()
는 시작 위치를 허용하지만 와일드 카드 문자는 허용하지 않습니다.