CharIndex vs PatIndex

-- MSSQL 2012. 6. 25. 18:17
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
InStr처럼 MSSQL에서 문자열의 위치를 찾고자 할 때 CharIndex나 PatIndex를 쓴다.
이 두 함수의 차이점이 무엇인지 궁금하여 찾아보았다.

1. 와일드카드 사용유무

CharIndex는 와일드카드를 사용할 수 없으나, PatIndex는 와일드카드를 이용할 수 있다.

SELECT CharIndex('hello', 'My Hello Code')
SELECT PatIndex('%hello%', 'My Hello Code')

2. 검색자료형의 제한

CharIndex는 8000자까지의 문자열에 대해서 검색이 가능하지만, PatIndex는 이러한 제한이 없다.
즉, PatIndex는 Text, NText, Image 데이터형식에 대해서 검색이 가능하지만, CharIndex는 그러하지 못하다.

3. 퍼포먼스

2번항목의 제약사항을 보면 CharIndex의 경우 퍼포먼스를 위해 제약사항을 둔 것으로 보인다. (개인적인 생각)

* Case-Sensitive

이 두 함수 모두 기본적으로 대소문자를 가리지 않고 검색을 하는데, 대소문자를 가리면서 검색을 하려면 어떻게 할까?
전에 정리하였던 문서를 바탕으로 아래와 같이 대소문자를 가리는 구문을 만들어보았다.

SELECT CharIndex('Hello', 'My Hello Code' COLLATE Korean_Wansung_CS_AI)
SELECT PatIndex('%Hello%', 'My Hello Code' COLLATE Korean_Wansung_CS_AI)
posted by 어린왕자악꿍