MySQL에서 타임스탬프(timestamp) 값의 일부, 예를 들어 연도나 월 같은 특정 요소를 기준으로 데이터를 조회해야 하는 경우가 자주 있습니다. 이때 YEAR(), MONTH(), DAY() 같은 날짜 함수를 WHERE 절과 함께 사용하면 손쉽게 원하는 데이터만 추출할 수 있습니다.
1. 샘플 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
AdmissionDate timestamp
);
Query OK, 0 rows affected (0.90 sec)2. 데이터 삽입
INSERT 명령어를 사용하여 테이블에 여러 개의 입학일(AdmissionDate) 레코드를 추가합니다.
mysql> insert into DemoTable values('2007-01-10');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('2015-07-12');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2017-11-01');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('2019-08-29');
Query OK, 1 row affected (0.08 sec)3. 전체 데이터 확인
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2007-01-10 00:00:00 | | 2015-07-12 00:00:00 | | 2017-11-01 00:00:00 | | 2019-08-29 00:00:00 | +---------------------+ 4 rows in set (0.00 sec)
4. 타임스탬프의 연도를 기준으로 조회하기
타임스탬프의 특정 부분을 기준으로 MySQL 테이블에서 데이터를 선택하려면 YEAR() 함수를 활용하면 됩니다. 아래 예제에서는 입학일의 연도가 2017년인 레코드만 조회합니다.
mysql> select *from DemoTable where year(AdmissionDate)='2017';
실행 결과는 다음과 같습니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2017-11-01 00:00:00 | +---------------------+ 1 row in set (0.23 sec)
참고: 월(Month) 기준 조회도 가능
연도뿐만 아니라 MONTH() 함수를 사용하면 특정 월에 해당하는 데이터도 간단히 조회할 수 있습니다.
mysql> select *from DemoTable where month(AdmissionDate)='07';
이처럼 YEAR(), MONTH(), DAY() 등의 함수를 조합하면 타임스탬프 값에서 원하는 부분만 추출하여 유연하게 데이터를 필터링할 수 있습니다.