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
*/