Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL INSTR() 함수를 WHERE 절과 함께 사용하는 방법

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이면 존재하지 않는다는 점만 기억하면 됩니다.