개요
MySQL에서 datetime 타입으로 저장된 데이터에는 시간 정보까지 포함되어 있기 때문에, 같은 날짜라도 시각이 다르면 서로 다른 값으로 취급됩니다. 이 글에서는 DISTINCT 키워드를 활용해 datetime 컬럼에서 중복을 제거하고 고유한 날짜 값만 조회하는 방법을 예제와 함께 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable
(
AdmissionDate datetime
);
Query OK, 0 rows affected (8.99 sec)DemoTable이라는 이름의 테이블에 입학일(AdmissionDate) 정보를 저장할 datetime 컬럼 하나를 만들었습니다.
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 입력합니다. 의도적으로 동일한 날짜·시간 값을 여러 번 넣어 중복 데이터를 만들어 두겠습니다.
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('2010-01-10 12:30:45');
Query OK, 1 row affected (0.71 sec)
mysql> insert into DemoTable values('2010-01-12 12:30:45');
Query OK, 1 row affected (1.22 sec)
mysql> insert into DemoTable values('2010-01-20 12:30:45');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2010-01-20 12:30:45');
Query OK, 1 row affected (0.51 sec)총 6개의 레코드를 삽입했습니다. 이 중 '2010-01-10'은 3번, '2010-01-20'은 2번 반복되어 있습니다.
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2010-01-10 12:30:45 | | 2010-01-10 12:30:45 | | 2010-01-10 12:30:45 | | 2010-01-12 12:30:45 | | 2010-01-20 12:30:45 | | 2010-01-20 12:30:45 | +---------------------+ 6 rows in set (0.00 sec)
예상대로 동일한 값들이 그대로 중복되어 출력됩니다.
4. DISTINCT로 고유한 날짜만 조회하기
중복을 제거하고 고유한 값만 얻으려면 SELECT 문에 DISTINCT 키워드를 추가하면 됩니다.
mysql> select distinct AdmissionDate from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------+ | AdmissionDate | +---------------------+ | 2010-01-10 12:30:45 | | 2010-01-12 12:30:45 | | 2010-01-20 12:30:45 | +---------------------+ 3 rows in set (0.00 sec)
6개의 레코드가 3개의 고유한 값으로 정리되어 반환된 것을 확인할 수 있습니다.
참고: 날짜 부분만 기준으로 중복 제거하기
DISTINCT는 시간 정보까지 포함한 전체 값을 기준으로 비교합니다. 만약 같은 날짜라도 시각이 다르면 별개의 값으로 처리되므로, 순수하게 '날짜'만 기준으로 중복을 제거하고 싶다면 DATE() 함수를 함께 사용하는 것이 좋습니다.
mysql> select distinct date(AdmissionDate) from DemoTable;
이렇게 하면 시간과 무관하게 연-월-일 단위의 고유한 날짜 목록만 깔끔하게 얻을 수 있습니다.
마무리
정리하면, MySQL에서 datetime 컬럼의 중복 값을 제거하는 가장 간단한 방법은 SELECT DISTINCT 컬럼명 쿼리를 사용하는 것입니다. 날짜 단위로만 비교해야 하는 경우에는 DATE() 함수를 조합하면 원하는 결과를 손쉽게 얻을 수 있습니다.