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

MySQL에서 DATEDIFF() 함수로 DateTime 비교하고 열 간 날짜 차이 구하는 방법

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, 시작날짜, 끝날짜)는 두 날짜 사이의 연도 차이를 정확하게 계산해 주므로, 실무에서 나이 조건 검색 시 널리 사용되는 방식입니다.