정규 표현식(REGEXP)으로 패턴 검색하기
MySQL에서 특정 패턴과 일치하는 데이터를 검색하려면 REGEXP(정규 표현식) 연산자를 사용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
UserId varchar(100)
);
Query OK, 0 rows affected (1.28 sec)
1. 샘플 데이터 삽입
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('User-123-G');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Us-453-GO');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('TRUE-908-K');
Query OK, 1 row affected (0.20 sec)
2. 전체 레코드 조회
SELECT 문으로 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+ | UserId | +------------+ | User-123-G | | Us-453-GO | | TRUE-908-K | +------------+ 3 rows in set (0.00 sec)
3. REGEXP 쿼리로 특정 패턴 검색
다음은 MySQL에서 특정 패턴을 기준으로 검색하는 쿼리입니다. 여기서는 "영숫자 4개 - 영숫자 3개 - 영숫자 1개" 형태의 패턴을 지정했습니다.
참고: '-'는 실제 하이픈(-) 문자를 의미합니다.
mysql> select *from DemoTable where UserId regexp '^[[:alnum:]]{4}-[[:alnum:]]{3}-[[:alnum:]]{1}$';
실행 결과는 다음과 같습니다.
+------------+ | UserId | +------------+ | User-123-G | | TRUE-908-K | +------------+ 2 rows in set (0.12 sec)
정규 표현식 패턴 해설
위 쿼리에 사용된 각 요소의 의미는 다음과 같습니다.
- ^ : 문자열의 시작을 의미합니다.
- [[:alnum:]] : 알파벳 또는 숫자 중 한 글자와 일치하는 POSIX 문자 클래스입니다.
- {4}, {3}, {1} : 앞의 문자 클래스가 각각 4번, 3번, 1번 반복되어야 함을 나타냅니다.
- - : 구분자인 하이픈 문자 그대로를 의미합니다.
- $ : 문자열의 끝을 의미합니다.
따라서 이 쿼리는 "4글자-3글자-1글자" 구조를 가진 UserId만 반환합니다. 그 결과 세 개의 레코드 중 'User-123-G'와 'TRUE-908-K' 두 행이 조건에 부합하여 조회된 것입니다. 'Us-453-GO'는 첫 번째 그룹이 2글자뿐이라 패턴에 맞지 않아 제외되었습니다.
마무리
단순한 부분 문자열 검색에는 LIKE 연산자를 사용할 수 있지만, 복잡하고 규칙적인 형식(예: 전화번호, 제품 코드, ID 체계 등)을 검증하거나 검색할 때는 REGEXP가 훨씬 강력하고 유연한 선택입니다. 실무에서도 데이터 형식 유효성 확인용 필터링에 정규 표현식이 널리 활용됩니다.