MSSQL 특정 문자 찾기 CHARINDEX

MSSQL에서 CHARINDEX 내장 함수를 통해 문자열 내 특정 문자를 찾는 방법을 소개합니다.

CHARINDEX

CHARINDEX 함수는 문자열 내 원하는 특정 문자의 위치(INDEX)를 리턴합니다.

기본사용법

문법

CHARINDEX([찾을문자], [대상문자열])

/*
  [대상문자열]에서 [찾을문자]가 있는 위치(INDEX)를 리턴합니다.
  [찾을문자]가 없는 경우 0을 리턴합니다.
*/

예시

SELECT *
  FROM TARGET_TABLE
 WHERE CHARINDEX('AI', NAME) > 0
 
/*
  NAME에 'AI' 라는 문자가 포함된 데이터만 조회합니다.
  NAME = 'AIDEN' -> 조회O
  NAME = 'JOHN' -> 조회X
*/

시작 위치 지정하여 찾기

문법

CHARINDEX([찾을문자], [대상문자열], [찾기시작할 위치])

/*
  [대상문자열]에서 [찾기시작할 위치]이후에 [찾을문자]가 있는 위치(INDEX)를 리턴합니다.
  [찾을문자]가 없는 경우 0을 리턴합니다.
*/

예시

SELECT CHARINDEX('A', NAME, 4)
  FROM TARGET_TABLE

 
/*
  NAME에 4번째글자 이후처음 등장하는 'A'라는 문자의 위치를 리턴합니다.
  NAME = 'ADIEN' -> 0
  NAME = 'NANA' -> 4
*/

아래 예시는 해당문자의 두 번째 위치를 구하는 방법입니다.

SELECT CHARINDEX('A', NAME, CHARINDEX('A', NAME) + 1)
  FROM TARGET_TABLE
  
/*
  문자찾는 시작위치가 'A'문자가 첫번째로 등장하는 INDEX + 1이기 때문에
  'A'라는 문자가 두번째로 등장하는 위치(INDEX)를 리턴합니다.
  NAME = 'AIDEN' -> 0
  NAME = 'NANA' -> 4
  NAME = 'AA' -> 2
*/

대소문자 구분하여 문자위치 찾기

문법

CHARINDEX([찾을문자], [대상문자열] COLLATE Latin1_General_CS_AS)
CHARINDEX([찾을문자], [대상문자열] COLLATE Latin1_General_CS_IS)

/*
  [대상문자열] 입력이후 COLLATE [대소문자구분여부값] 입력합니다.
  Latin1_General_CS_AS: 대소문자 구분합니다.
  Latin1_General_CS_IS: 대소문자 구분안함(기본값) 
  --//지정안할경우 기본으로 대소문자 구분하지 않습니다.
*/

예시

SELECT CHARINDEX('A', NAME COLLATE Latin1_General1_CS_AS)
  FROM TARGET_TABLE
  
/*
  대소문자 구분하여 NAME에 'A'(대문자) 의 위치를 리턴합니다.
  NAME = 'Aiden' -> 1
  NAME = 'Noah' -> 0
*/