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

MySQL IFNULL() 함수로 NULL 날짜 값 처리하고 정렬하는 방법

날짜 컬럼에 NULL 값이 섞여 있어도 IFNULL() 함수를 사용하면 두 개의 날짜 컬럼을 마치 하나인 것처럼 손쉽게 다룰 수 있습니다. 이 글에서는 예제 테이블을 만들고, IFNULL()을 활용해 NULL 값을 대체하며 데이터를 정렬하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 날짜 컬럼 두 개를 가진 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> added_date date,
-> updated_date date
-> );
Query OK, 0 rows affected (0.95 sec)

2. 샘플 데이터 삽입하기

INSERT 문을 사용해 몇 개의 레코드를 추가합니다. 이때 일부 레코드에는 의도적으로 NULL 값을 넣습니다.

mysql> insert into DemoTable values('2019-01-10','2019-06-01');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('2019-05-19',NULL);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(NULL,'2019-09-05');
Query OK, 1 row affected (0.18 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블의 모든 데이터를 확인합니다.

mysql> select *from DemoTable;

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

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| 2019-01-10 | 2019-06-01 |
| 2019-05-19 | NULL |
| NULL | 2019-09-05 |
+------------+--------------+
3 rows in set (0.00 sec)

핵심 원리: IFNULL() 함수

IFNULL(updated_date, added_date)는 updated_date 값이 존재하면 그 값을 그대로 반환하고, NULL이라면 added_date 값을 대신 사용합니다. 즉, 두 날짜 중 실제로 의미 있는 값을 기준으로 정렬할 수 있게 됩니다.

Case 1 — 내림차순(DESC) 정렬

가장 최근 날짜부터 보고 싶다면 ORDER BY 절에 DESC를 붙입니다.

mysql> select *from DemoTable order by ifnull(updated_date,added_date) desc;

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

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| NULL | 2019-09-05 |
| 2019-01-10 | 2019-06-01 |
| 2019-05-19 | NULL |
+------------+--------------+
3 rows in set (0.00 sec)

Case 2 — 오름차순(ASC) 정렬

반대로 오래된 날짜부터 보고 싶다면 DESC를 생략하면 됩니다. MySQL에서는 ASC가 기본 정렬 방식입니다.

mysql> select *from DemoTable order by ifnull(updated_date,added_date);

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

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| 2019-05-19 | NULL |
| 2019-01-10 | 2019-06-01 |
| NULL | 2019-09-05 |
+------------+--------------+
3 rows in set (0.00 sec)

마무리

이처럼 IFNULL() 함수를 활용하면 NULL 값이 포함된 날짜 컬럼도 안정적으로 정렬할 수 있습니다. 참고로 COALESCE() 함수를 사용해도 동일한 결과를 얻을 수 있으며, 세 개 이상의 컬럼을 처리해야 할 때는 COALESCE()가 더 유용합니다.