MySQL 테이블의 datetime 열에서 중복 없이 고유한 날짜만 추출하려면 DISTINCT 키워드를 사용하면 됩니다. 특히 날짜와 시간이 함께 저장되어 있기 때문에, YEAR()나 MONTH() 같은 함수와 함께 활용하면 원하는 형태로 데이터를 정리할 수 있습니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다. 아래 쿼리는 사용자 메시지와 게시 시간을 저장하는 테이블을 생성합니다.
mysql> create table PostMesssageDemo
- > (
- > UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
- > UserMessage varchar(100),
- > UserPost datetime
- > );
Query OK, 0 rows affected (0.60 sec)샘플 데이터 삽입하기
테이블 생성이 완료되면 INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. 여기서는 NOW() 함수와 DATE_ADD() 함수를 활용해 다양한 날짜 값을 넣어 보겠습니다.
mysql> insert into PostMesssageDemo(UserMessage,UserPost) values('Software Developer',now());
Query OK, 1 row affected (0.17 sec)
mysql> insert into PostMesssageDemo(UserMessage,UserPost) values('Software Developer',date_add(now(),interval 3 month));
Query OK, 1 row affected (0.16 sec)
mysql> insert into PostMesssageDemo(UserMessage,UserPost) values('Software Developer',now());
Query OK, 1 row affected (0.12 sec)
mysql> insert into PostMesssageDemo(UserMessage,UserPost) values('Software Developer','2019-03-31 17:30:34');
Query OK, 1 row affected (0.10 sec)저장된 전체 레코드 확인하기
SELECT 문을 사용해 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from PostMesssageDemo;
실행 결과는 다음과 같습니다.
+--------+--------------------+---------------------+ | UserId | UserMessage | UserPost | +--------+--------------------+---------------------+ | 1 | Software Developer | 2019-02-15 18:07:27 | | 2 | Software Developer | 2019-05-15 18:09:18 | | 3 | Software Developer | 2019-02-15 18:09:31 | | 4 | Software Developer | 2019-03-31 17:30:34 | +--------+--------------------+---------------------+ 4 rows in set (0.00 sec)
출력 결과를 보면 1번과 3번 레코드가 같은 날짜(2019년 2월 15일)에 작성된 것을 확인할 수 있습니다. 이제 이 중복을 제거하고 고유한 날짜만 추출해 보겠습니다.
DISTINCT로 고유한 날짜 조회하기
datetime 값에는 시간 정보까지 포함되어 있으므로, 단순히 DISTINCT만 적용하면 초 단위까지 모두 비교하게 됩니다. 따라서 YEAR()와 MONTH() 함수를 함께 사용해 연도와 월 기준으로 고유한 날짜를 추출하는 것이 효과적입니다.
mysql> select distinct year(UserPost),month(UserPost) from PostMesssageDemo;
위 쿼리의 실행 결과는 다음과 같습니다.
+----------------+-----------------+ | year(UserPost) | month(UserPost) | +----------------+-----------------+ | 2019 | 2 | | 2019 | 5 | | 2019 | 3 | +----------------+-----------------+ 3 rows in set (0.00 sec)
정리
datetime 열에서 고유한 날짜를 얻는 핵심 포인트는 다음과 같습니다.
- DISTINCT 키워드를 사용하면 중복 값을 제거할 수 있습니다.
- datetime은 시간 정보를 포함하므로, YEAR(), MONTH(), DAY() 등의 함수로 필요한 단위만 추출한 뒤 DISTINCT를 적용하는 것이 좋습니다.
- 일 단위의 고유 날짜가 필요하다면 DATE(UserPost)처럼 DATE() 함수를 사용해 날짜 부분만 잘라내는 방법도 유용합니다.