MySQL의 INSTR() 함수는 문자열 내에서 특정 부분 문자열이 처음 나타나는 위치(인덱스)를 정수로 반환하는 함수입니다. 이 함수를 WHERE 절과 함께 사용하면 특정 문자열을 포함하거나 포함하지 않는 행만 손쉽게 필터링할 수 있습니다.
INSTR() 함수와 WHERE 절의 기본 사용법
WHERE 절에서 INSTR() 함수를 사용할 때는 첫 번째 인수에 테이블의 컬럼 이름을, 두 번째 인수에 찾고자 하는 부분 문자열을 지정하고, 그 결과를 비교 연산자(>, = 등)와 조합하여 조건을 만듭니다.
예제 데이터: Student 테이블
다음과 같은 데이터가 저장된 'Student' 테이블이 있다고 가정해 보겠습니다.
mysql> Select * from Student; +------+---------+---------+-----------+ | Id | Name | Address | Subject | +------+---------+---------+-----------+ | 1 | Gaurav | Delhi | Computers | | 2 | Aarav | Mumbai | History | | 15 | Harshit | Delhi | Commerce | | 20 | Gaurav | Jaipur | Computers | | 21 | Yashraj | NULL | Math | +------+---------+---------+-----------+ 5 rows in set (0.02 sec)
특정 문자열이 포함된 행 조회하기 (> 0)
아래 쿼리는 이름(Name)에 'av'라는 문자열이 포함된 학생만 조회하는 예시입니다. INSTR() 함수의 반환값이 0보다 크면 해당 문자열이 존재한다는 의미이며, 반환값은 문자열이 시작되는 위치를 나타냅니다.
mysql> select name, INSTR(Name,'av') As Result from student where INSTR(Name,'av') > 0; +--------+--------+ | name | Result | +--------+--------+ | Gaurav | 5 | | Aarav | 4 | | Gaurav | 5 | +--------+--------+ 3 rows in set (0.00 sec)
결과를 보면 'Gaurav'는 5번째 위치에서, 'Aarav'는 4번째 위치에서 'av'가 발견되었기 때문에 Result 값으로 각각 5와 4가 출력됩니다.
특정 문자열이 포함되지 않은 행 조회하기 (= 0)
반대로 비교 연산자를 = 0으로 바꾸면 'av' 문자열을 포함하지 않는 행만 조회할 수 있습니다. INSTR() 함수는 문자열을 찾지 못하면 0을 반환하기 때문입니다.
mysql> select name, INSTR(Name,'av') As Result from student where INSTR(Name,'av') = 0; +---------+--------+ | name | Result | +---------+--------+ | Harshit | 0 | | Yashraj | 0 | +---------+--------+ 2 rows in set (0.01 sec)
정리
이처럼 INSTR() 함수를 WHERE 절과 함께 활용하면 LIKE 연산자를 사용하는 것과 유사한 문자열 검색 필터링을 구현할 수 있으며, 검색된 문자열의 위치 값까지 함께 확인해야 하는 경우에 특히 유용합니다. 반환값이 0보다 크면 문자열이 존재하는 것이고, 0이면 존재하지 않는다는 점만 기억하면 됩니다.