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

MySQL에서 타임스탬프를 내림차순 정렬할 때 0000-00-00 00:00:00을 가장 먼저 표시하는 방법

MySQL에서 타임스탬프 데이터를 내림차순(DESC)으로 정렬하면 일반적으로 최신 날짜가 맨 앞에 오게 됩니다. 하지만 0000-00-00 00:00:00과 같은 0(zero) 타임스탬프 값이 포함된 경우, 이를 가장 먼저 표시하고 싶을 때가 있습니다. 이 글에서는 ORDER BY 절을 활용해 0 타임스탬프를 우선적으로 배치하면서 나머지 데이터를 내림차순으로 정렬하는 방법을 알아보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    `timestamp` timestamp
);
Query OK, 0 rows affected (1.12 sec)

2. 레코드 삽입

INSERT 명령을 사용하여 몇 개의 레코드를 삽입합니다. 여기에는 의도적으로 0 타임스탬프 값도 함께 넣습니다.

mysql> insert into DemoTable values(now());
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('00:00:00');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('2018-01-10 12:34:45');
Query OK, 1 row affected (0.80 sec)
mysql> insert into DemoTable values('2019-12-31 10:50:45');
Query OK, 1 row affected (0.84 sec)

3. 저장된 데이터 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+---------------------+
| timestamp           |
+---------------------+
| 2019-08-17 06:17:12 |
| 0000-00-00 00:00:00 |
| 2018-01-10 12:34:45 |
| 2019-12-31 10:50:45 |
+---------------------+
4 rows in set (0.00 sec)

4. 0 타임스탬프를 먼저 표시하며 내림차순 정렬하기

핵심은 ORDER BY 절에서 두 개의 정렬 기준을 사용하는 것입니다. 첫 번째 기준인 (`timestamp`=0)은 해당 행의 타임스탬프가 0이면 1, 아니면 0을 반환하는 불리언 표현식입니다. 이를 DESC로 정렬하면 0 타임스탬프를 가진 행이 항상 맨 앞에 위치하게 되고, 두 번째 기준인 `timestamp` DESC가 나머지 행들을 최신 날짜 순으로 정렬합니다.

mysql> select *from DemoTable order by (`timestamp`=0) DESC,`timestamp` DESC;

실행 결과는 다음과 같습니다.

+---------------------+
| timestamp           |
+---------------------+
| 0000-00-00 00:00:00 |
| 2019-12-31 10:50:45 |
| 2019-08-17 06:17:12 |
| 2018-01-10 12:34:45 |
+---------------------+
4 rows in set (0.00 sec)

정리

위 출력 결과를 보면 0000-00-00 00:00:00 값이 가장 먼저 표시되고, 그 뒤로 실제 날짜들이 최신순(내림차순)으로 정렬된 것을 확인할 수 있습니다. 이처럼 ORDER BY (`컬럼명`=0) DESC, `컬럼명` DESC 패턴을 활용하면 특수한 0 값을 우선 처리하면서 원하는 정렬 순서를 손쉽게 구현할 수 있습니다.