MSSQL Charindex 사용법 및 여러개, 뒤에서, 두번째 등

개요

MSSQL Charindex 함수는 문자열에서 문자(열)의 위치를 찾아서 그 위치를 반환하는 함수입니다.
구문

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

MSSQL Charindex 기본 예제

SELECT CHARINDEX('2', '12345')
MSSQL CHARINDEX 결과

12345 에서 2 를 찾아서 2의 위치인 2를 리턴합니다.

한글이 섞인 경우

SELECT CHARINDEX('2', '12345')
		, CHARINDEX('', '일이삼사오')
		, CHARINDEX(N'', N'일이삼사오')
		, CHARINDEX(N'', N'1이삼사오')
		, CHARINDEX(N'이삼', N'일이삼사오')
CHARINDEX 한글 섞인 경우

한글이 섞여도 결과는 동일하고, 찾는 문자가 ‘이삼’ 과 같이 여러 글자여도 모두 동일하게 2가 리턴됩니다.

여러개 를 찾는 경우

두 번째나 세 번째를 찾는 경우, 또는 여러 개가 들어있는데, 모든 인덱스를 찾고싶은 경우는 목적에 따라 사용자정의 함수를 만들거나, charindex 말고 다른 함수를 사용해야 합니다.
두 번째나 세 번째를 찾는 경우는 charindex 함수의 세 번째 인수를 이용할 수 있습니다. 세번째 인수는 charindex 함수가 찾기 시작하는 위치를 지정하는 인수 입니다.
그래서 주어진 문자열에서 처음 나타나는 인덱스를 시작위치로 지정하면 두 번째 인덱스를 찾을 수 있습니다. 세번째 네번째도 동일한 방식으로 CHARINDEX 를 중첩하면 됩니다.

두 번째, 세 번째 예제입니다.

SELECT CHARINDEX('2', '123-123-123', CHARINDEX('2', '123-123-123')+1) AS SCD	
     , CHARINDEX('2', '123-123-123', 
           CHARINDEX('2', '123-123-123', 
               CHARINDEX('2', '123-123-123') + 1
                    ) + 1
                 ) AS THD
CHARINDEX 여러개 찾기 결과

결과는 위와 같이 나옵니다. 혹시 해당 문자가 없을 경우에는 0이 나오고, NULL 이 있을 경우 NULL 로 나옵니다.

뒤에서 부터 찾는 경우

뒤에서 찾는 경우는 없어서 REVERSE 함수를 사용해서 문자를 뒤집어놓고 찾으면 됩니다. 만약 INDEX 만 필요한게 아니고, 구분자로 구분된 문자열이 필요하다면 STRING_SPLIT 함수를 이용해도 됩니다.

SELECT CHARINDEX('2', '12345') AS [앞], 
      CHARINDEX('2', REVERSE('12345')) AS [뒤]
CHARINDEX 뒤에서 찾기 결과

MSSQL 문자열함수 26개 정리 바로가기
MSSQL CHARINDEX MS 문서 링크

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다