MySQL에서 날짜(date)를 먼저 정렬한 후, 같은 날짜 내에서 시간(time)까지 오름차순으로 정렬하려면 ORDER BY 절에 두 개의 컬럼을 나열하면 됩니다. 이번 글에서는 예제 테이블을 만들고 실제 데이터로 정렬 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 배송 날짜(ShippingDate)와 배송 시간(ShippingTime)을 저장할 테이블을 생성합니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table OrderByDateThenTimeDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> ShippingDate date, -> ShippingTime time -> ); Query OK, 0 rows affected (0.56 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 입력합니다. 여기서는 의도적으로 같은 날짜(2018-01-24)에 서로 다른 두 개의 시간 값을 넣어, 시간까지 함께 정렬되는지 확인해 보겠습니다.
mysql> insert into OrderByDateThenTimeDemo(ShippingDate,ShippingTime) values('2018-01-24','16:45:40');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OrderByDateThenTimeDemo(ShippingDate,ShippingTime) values('2018-01-24','15:30:35');
Query OK, 1 row affected (0.22 sec)
mysql> insert into OrderByDateThenTimeDemo(ShippingDate,ShippingTime) values('2018-04-25','14:20:25');
Query OK, 1 row affected (0.24 sec)
mysql> insert into OrderByDateThenTimeDemo(ShippingDate,ShippingTime) values('2019-02-14','18:07:55');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OrderByDateThenTimeDemo(ShippingDate,ShippingTime) values('2019-01-31','20:20:30');
Query OK, 1 row affected (0.26 sec)
3. 전체 레코드 조회하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다. 실행 쿼리는 다음과 같습니다.
mysql> select *from OrderByDateThenTimeDemo;
실행 결과는 아래와 같습니다. 현재는 입력 순서대로 데이터가 출력되고 있습니다.
+----+--------------+--------------+ | Id | ShippingDate | ShippingTime | +----+--------------+--------------+ | 1 | 2018-01-24 | 16:45:40 | | 2 | 2018-01-24 | 15:30:35 | | 3 | 2018-04-25 | 14:20:25 | | 4 | 2019-02-14 | 18:07:55 | | 5 | 2019-01-31 | 20:20:30 | +----+--------------+--------------+ 5 rows in set (0.00 sec)
4. 날짜와 시간 기준으로 정렬하기
이제 핵심인 ORDER BY 절을 사용한 정렬 쿼리입니다. 컬럼을 ORDER BY ShippingDate, ShippingTime처럼 쉼표로 나열하면, 먼저 날짜가 정렬되고 그다음 동일한 날짜 안에서 시간순으로 정렬됩니다.
mysql> select *from OrderByDateThenTimeDemo order by ShippingDate,ShippingTime;
실행 결과를 보면 날짜와 시간이 모두 올바르게 정렬된 것을 확인할 수 있습니다. 예를 들어 2018-01-24 날짜에는 두 개의 시간 값이 있는데, 위 쿼리를 통해 15:30:35 → 16:45:40 순으로 시간도 성공적으로 정렬되었습니다.
+----+--------------+--------------+ | Id | ShippingDate | ShippingTime | +----+--------------+--------------+ | 2 | 2018-01-24 | 15:30:35 | | 1 | 2018-01-24 | 16:45:40 | | 3 | 2018-04-25 | 14:20:25 | | 5 | 2019-01-31 | 20:20:30 | | 4 | 2019-02-14 | 18:07:55 | +----+--------------+--------------+ 5 rows in set (0.00 sec)
정리
MySQL에서 날짜와 시간을 동시에 정렬하려면 ORDER BY 절에 날짜 컬럼과 시간 컬럼을 차례로 지정하면 됩니다. 기본값은 오름차순(ASC)이며, 내림차순으로 정렬하고 싶다면 각 컬럼 뒤에 DESC 키워드를 붙여주면 됩니다. 또한 DATE 타입과 TIME 타입을 하나의 DATETIME 컬럼으로 통합해 관리하면 정렬뿐 아니라 데이터 관리 측면에서도 더욱 편리합니다.