MySQL에서 두 개의 DateTime 값을 비교하거나 서로 다른 열에 저장된 날짜 간의 차이를 구하려면 DATEDIFF() 함수를 사용하면 됩니다. 이 함수는 두 날짜 사이의 일수(day) 차이를 반환하며, 이를 응용하면 특정 조건(예: 23세 이상)에 맞는 레코드만 손쉽게 필터링할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 만들어 보겠습니다. 생년월일(DOB)과 현재 날짜(CurrentDate), 두 개의 datetime 컬럼으로 구성됩니다.
mysql> create table DemoTable(DOB datetime,CurrentDate datetime);
Query OK, 0 rows affected (0.59 sec)
2. 데이터 삽입하기
INSERT 명령어로 몇 개의 레코드를 추가합니다. CURDATE() 함수를 사용하면 현재 날짜가 자동으로 입력되므로 편리합니다.
mysql> insert into DemoTable values('1995-01-21',CURDATE());
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('1998-11-01',CURDATE());
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable values('2000-10-24',CURDATE());
Query OK, 1 row affected (0.22 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블에 저장된 모든 데이터를 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------+---------------------+
| DOB | CurrentDate |
+---------------------+---------------------+
| 1995-01-21 00:00:00 | 2019-07-08 00:00:00 |
| 1998-11-01 00:00:00 | 2019-07-08 00:00:00 |
| 2000-10-24 00:00:00 | 2019-07-08 00:00:00 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
4. DateTime 비교 쿼리 실행하기
다음은 DATEDIFF() 함수를 활용한 DateTime 비교 쿼리입니다. 두 날짜의 일수 차이를 365로 나누어 대략적인 '연령'을 계산한 뒤, 그 값이 23보다 큰 레코드만 조회합니다.
mysql> select *from DemoTable where (datediff(CurrentDate,DOB) / 365) > 23;
실행 결과는 다음과 같습니다.
+---------------------+---------------------+
| DOB | CurrentDate |
+---------------------+---------------------+
| 1995-01-21 00:00:00 | 2019-07-08 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
참고: 더 정확한 나이 계산 방법
DATEDIFF() 결과를 365로 나누는 방식은 윤년까지 고려하지 못하는 근사치라는 점에 유의해야 합니다. 만 나이를 기준으로 정확하게 필터링하려면 TIMESTAMPDIFF() 함수를 사용하는 것이 좋습니다.
mysql> select *from DemoTable where TIMESTAMPDIFF(YEAR, DOB, CurrentDate) > 23;
TIMESTAMPDIFF(YEAR, 시작날짜, 끝날짜)는 두 날짜 사이의 연도 차이를 정확하게 계산해 주므로, 실무에서 나이 조건 검색 시 널리 사용되는 방식입니다.