MySQL에서 점(.)이 포함된 문자열, 예를 들어 버전 번호처럼 생긴 데이터를 다룰 때는 단순한 LIKE 패턴 매칭만으로는 원하는 결과를 얻기 어렵습니다. 특정 숫자로 시작하는 레코드를 정확하게 조회하려면 REGEXP(정규 표현식)를 사용하는 것이 가장 확실한 방법입니다.
이번 글에서는 실제 예제를 통해 점이 포함된 문자열에서 '19'로 시작하는 레코드를 조회하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 게임 출시 버전 정보를 저장할 테이블을 만듭니다.
mysql> create table DemoTable
-> (
-> GameReleaseVersion varchar(20)
-> );
Query OK, 0 rows affected (0.57 sec)
2. 샘플 데이터 삽입
insert 명령을 사용해 몇 개의 버전 문자열을 입력합니다.
mysql> insert into DemoTable values('19.6');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('18.4');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('17.6');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('19.5');
Query OK, 1 row affected (0.14 sec)3. 전체 레코드 확인
select 문으로 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------------+
| GameReleaseVersion |
+--------------------+
| 19.6 |
| 18.4 |
| 17.6 |
| 19.5 |
+--------------------+
4 rows in set (0.00 sec)
4. REGEXP를 활용한 정확한 조회
아래 쿼리는 점이 포함된 문자열에서도 정상적으로 작동합니다. 여기서는 '19'로 시작하면서 점(.) 뒤에 숫자가 이어지는 레코드만 가져옵니다.
mysql> select *from DemoTable
-> where GameReleaseVersion regexp '^19\.[0-9]+$';
실행 결과는 다음과 같습니다.
+--------------------+
| GameReleaseVersion |
+--------------------+
| 19.6 |
| 19.5 |
+--------------------+
2 rows in set (0.15 sec)
정규 표현식 패턴 해설
위에서 사용한 패턴 '^19\.[0-9]+$'의 각 요소는 다음과 같은 의미를 가집니다.
- ^19 — 문자열이 반드시 '19'로 시작해야 합니다.
- \. — 점(.) 문자와 정확히 일치합니다. 점은 정규 표현식에서 임의의 한 문자를 의미하는 특수 문자이므로 역슬래시(\)로 이스케이프해야 합니다.
- [0-9]+ — 점 뒤에 숫자가 하나 이상 존재해야 합니다.
- $ — 문자열이 그 지점에서 끝나야 함을 나타냅니다.
마무리
LIKE 연산자는 간단한 와일드카드 매칭에는 유용하지만, 버전 번호처럼 구분자가 포함된 문자열을 정밀하게 필터링하기에는 한계가 있습니다. 이런 경우 REGEXP를 사용하면 시작 숫자, 구분자, 뒤따르는 형식까지 모두 명확하게 지정할 수 있어 훨씬 안정적인 조회가 가능합니다. 버전 데이터 검색, 로그 분석 등 복잡한 문자열 조건이 필요하다면 REGEXP 패턴 작성에 익숙해지는 것을 추천합니다.