데이터베이스에서 작동하는 방식.가이드

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 |+-------------------------+-----------------+

이 경우에는 내가 사용하는WHEREPATINDEX()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()는 시작 위치를 허용하지만 와일드 카드 문자는 허용하지 않습니다.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다