Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 datetime 열로부터 고유한 날짜를 추출하는 방법

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() 함수를 사용해 날짜 부분만 잘라내는 방법도 유용합니다.