개요
MSSQL Charindex 함수는 문자열에서 문자(열)의 위치를 찾아서 그 위치를 반환하는 함수입니다.
구문
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
MSSQL Charindex 기본 예제
SELECT CHARINDEX('2', '12345')

12345 에서 2 를 찾아서 2의 위치인 2를 리턴합니다.
한글이 섞인 경우
SELECT CHARINDEX('2', '12345')
, CHARINDEX('이', '일이삼사오')
, CHARINDEX(N'이', N'일이삼사오')
, CHARINDEX(N'이', N'1이삼사오')
, CHARINDEX(N'이삼', N'일이삼사오')

한글이 섞여도 결과는 동일하고, 찾는 문자가 ‘이삼’ 과 같이 여러 글자여도 모두 동일하게 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

결과는 위와 같이 나옵니다. 혹시 해당 문자가 없을 경우에는 0이 나오고, NULL 이 있을 경우 NULL 로 나옵니다.
뒤에서 부터 찾는 경우
뒤에서 찾는 경우는 없어서 REVERSE 함수를 사용해서 문자를 뒤집어놓고 찾으면 됩니다. 만약 INDEX 만 필요한게 아니고, 구분자로 구분된 문자열이 필요하다면 STRING_SPLIT 함수를 이용해도 됩니다.
SELECT CHARINDEX('2', '12345') AS [앞],
CHARINDEX('2', REVERSE('12345')) AS [뒤]
