MySQL에서 특정 숫자로 시작하면서 바로 다음 문자가 알파벳(문자)인 레코드만 조회해야 하는 경우가 있습니다. 이럴 때 REGEXP 연산자를 활용하면 정규 표현식 기반으로 간단하게 원하는 데이터를 추출할 수 있습니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Value text
);
Query OK, 0 rows affected (1.28 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('645st');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('765stp');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('665tcp');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('606cpp');
Query OK, 1 row affected (0.14 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------+ | Value | +--------+ | 645st | | 765stp | | 665tcp | | 606cpp | +--------+ 4 rows in set (0.00 sec)
4. REGEXP를 사용한 조건 조회
이제 '6'으로 시작하고 그다음 문자가 영숫자(alphanumeric)인 값만 선택하는 쿼리입니다. 정규 표현식 패턴 '^6[[:alnum:]]'을 사용합니다.
^: 문자열의 시작을 의미합니다.6: 첫 번째 문자가 반드시 6이어야 합니다.[[:alnum:]]: 두 번째 문자가 알파벳 또는 숫자임을 나타냅니다.
mysql> select *from DemoTable WHERE Value REGEXP '^6[[:alnum:]]';
실행 결과는 다음과 같습니다.
+--------+ | Value | +--------+ | 645st | | 665tcp | | 606cpp | +--------+ 3 rows in set (0.01 sec)
결과를 보면 '765stp'처럼 첫 글자가 6이 아닌 레코드는 제외되고, '6'으로 시작하면서 두 번째 문자가 문자인 세 개의 레코드만 정상적으로 조회된 것을 확인할 수 있습니다. 만약 특정 알파벳으로 시작하는 값을 찾고 싶다면 '^6[[:alpha:]]' 패턴을 사용하면 되며, 대소문자 구분 없이 검색하려면 REGEXP BINARY 옵션 등을 함께 고려할 수 있습니다.