MySQL REGEXP_INSTR 함수로 검색어 조회하기
MySQL에서 특정 검색어가 포함된 필드를 찾고 싶다면 REGEXP_INSTR() 함수를 활용할 수 있습니다. 이 함수는 정규 표현식을 기반으로 문자열 내에서 패턴이 일치하는 위치를 반환하며, 일치하는 값이 있으면 0보다 큰 값을, 없으면 0을 반환합니다.
기본 문법
기본적인 사용 문법은 다음과 같습니다.
select * from yourTableName where REGEXP_INSTR(yourColumnName, yourSearchValue);
예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table demo64 -> ( -> id int not null auto_increment primary key, -> name varchar(40) -> ); Query OK, 0 rows affected (3.06 sec)
데이터 삽입
insert 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into demo64(name) values('John Smith');
Query OK, 1 row affected (0.21 sec)
mysql> insert into demo64(name) values('John Doe');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo64(name) values('Chris Brown');
Query OK, 1 row affected (0.08 sec)
mysql> insert into demo64(name) values('David Miller');
Query OK, 1 row affected (0.20 sec)
mysql> insert into demo64(name) values('Carol Taylor');
Query OK, 1 row affected (0.10 sec)저장된 레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from demo64;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+--------------+ | id | name | +----+--------------+ | 1 | John Smith | | 2 | John Doe | | 3 | Chris Brown | | 4 | David Miller | | 5 | Carol Taylor | +----+--------------+ 5 rows in set (0.00 sec)
REGEXP_INSTR을 이용한 검색 쿼리 실행
이제 'John'이라는 검색어가 포함된 필드를 찾는 쿼리를 실행해 보겠습니다.
mysql> select *from demo64 where REGEXP_INSTR(name,'John');
실행 결과는 다음과 같습니다.
+----+------------+ | id | name | +----+------------+ | 1 | John Smith | | 2 | John Doe | +----+------------+ 2 rows in set (0.00 sec)
결과 분석
위 출력 결과를 보면 이름에 'John'이 포함된 두 개의 레코드, 즉 John Smith와 John Doe만 반환된 것을 확인할 수 있습니다. REGEXP_INSTR 함수는 컬럼 값 안에 검색어가 포함되어 있는지 확인하므로, 부분 문자열 검색에 매우 유용합니다.
참고 사항
REGEXP_INSTR 함수는 MySQL 8.0 이상 버전에서 지원됩니다. 그 이전 버전을 사용 중이라면 LIKE 연산자나 REGEXP 연산자를 대신 사용하는 것이 좋습니다. 예를 들어 WHERE name LIKE '%John%' 또는 WHERE name REGEXP 'John'으로 동일한 결과를 얻을 수 있습니다.