개요
데이터베이스 작업을 하다 보면 전체 데이터가 아닌 특정 월에 해당하는 레코드만 조회해야 하는 경우가 자주 있습니다. 예를 들어 2019년 8월에 입학한 학생 기록만 확인하고 싶다면, MySQL의 LIKE 연산자를 활용하면 간단하게 해결할 수 있습니다.
이번 글에서는 예제 테이블을 직접 만들고, 문자열로 저장된 날짜 데이터에서 원하는 월의 레코드만 추출하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 날짜를 문자열(varchar) 타입으로 저장하는 테이블을 생성합니다.
mysql> create table DemoTable
(
AdmissionDate varchar(100)
);
Query OK, 0 rows affected (1.06 sec)2. 샘플 데이터 삽입하기
다음으로 INSERT 명령어를 사용해 여러 개의 날짜 레코드를 입력합니다.
mysql> insert into DemoTable values('2018-01-21');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-08-13');
Query OK, 1 row affected (0.56 sec)
mysql> insert into DemoTable values('2019-07-08');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2016-02-12');
Query OK, 1 row affected (0.14 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------+ | AdmissionDate | +---------------+ | 2018-01-21 | | 2019-08-13 | | 2019-07-08 | | 2016-02-12 | +---------------+ 4 rows in set (0.00 sec)
총 4개의 레코드가 서로 다른 연도와 월에 걸쳐 저장되어 있는 것을 확인할 수 있습니다.
4. 특정 월의 레코드만 필터링하기
이제 핵심인 2019년 8월에 해당하는 레코드만 조회하는 쿼리입니다. LIKE '2019-08%' 패턴을 사용하면 '2019-08'로 시작하는 모든 날짜를 손쉽게 필터링할 수 있습니다.
mysql> select *from DemoTable where AdmissionDate like '2019-08%';
실행 결과는 다음과 같습니다.
+---------------+ | AdmissionDate | +---------------+ | 2019-08-13 | +---------------+ 1 row in set (0.04 sec)
조건에 일치하는 2019년 8월 13일 레코드 하나만 정확하게 반환된 것을 볼 수 있습니다.
추가 팁: DATE 타입 컬럼이라면?
컬럼이 VARCHAR이 아닌 DATE 타입으로 저장되어 있다면, YEAR()와 MONTH() 함수를 조합하는 방식도 유용합니다.
SELECT * FROM DemoTable WHERE YEAR(AdmissionDate) = 2019 AND MONTH(AdmissionDate) = 8;
다만 이 방법은 인덱스를 활용하지 못할 수 있으므로, 대량의 데이터를 다룰 때는 아래처럼 범위 조건을 사용하는 것이 성능 면에서 더 유리합니다.
SELECT * FROM DemoTable WHERE AdmissionDate >= '2019-08-01' AND AdmissionDate < '2019-09-01';
마무리
MySQL에서 특정 월의 날짜 레코드를 조회하는 가장 간단한 방법은 LIKE 'YYYY-MM%' 패턴 매칭입니다. 문자열로 저장된 날짜라면 이 방식으로 충분하지만, 실무에서는 DATE 타입 사용과 범위 조건 쿼리를 함께 고려하면 더 안전하고 빠른 데이터 처리가 가능합니다.