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

MySQL TIMESTAMPDIFF 함수로 두 날짜의 개월 수 차이 계산하기

MySQL에서 두 날짜 사이의 차이를 개월(월) 단위로 계산해야 하는 경우가 자주 있습니다. 회원 가입일부터 현재까지의 기간, 상품 유효 기간 등을 구할 때 특히 유용한데, 이때 TIMESTAMPDIFF() 함수와 ABS() 함수를 함께 사용하면 손쉽게 처리할 수 있습니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 DATE 타입의 컬럼 두 개를 가진 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Date1 date,
-> Date2 date
-> );
Query OK, 0 rows affected (1.04 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용하여 테이블에 레코드를 입력합니다.

mysql> insert into DemoTable values('2017-01-10','2017-12-10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2018-12-31','2015-01-02');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2020-03-01','2019-06-15');
Query OK, 1 row affected (0.19 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+------------+------------+
| Date1 | Date2 |
+------------+------------+
| 2017-01-10 | 2017-12-10 |
| 2018-12-31 | 2015-01-02 |
| 2020-03-01 | 2019-06-15 |
+------------+------------+
3 rows in set (0.00 sec)

4. 개월 단위로 날짜 차이 계산하기

두 날짜의 차이를 개월 단위로 구하는 핵심 쿼리는 다음과 같습니다.

mysql> select abs(timestampdiff(MONTH,Date1,Date2)) from DemoTable;

실행 결과:

+---------------------------------------+
| abs(timestampdiff(MONTH,Date1,Date2)) |
+---------------------------------------+
| 11 |
| 47 |
| 8 |
+---------------------------------------+
3 rows in set (0.03 sec)

쿼리 동작 원리

TIMESTAMPDIFF(MONTH, Date1, Date2)는 Date2에서 Date1을 뺀 기간을 개월 단위로 반환합니다. 만약 첫 번째 인자로 넘긴 날짜(Date1)가 더 나중 날짜라면 음수가 반환되는데, ABS() 함수로 절댓값을 취하면 날짜의 순서와 관계없이 항상 양수인 개월 수를 얻을 수 있습니다.

  • 2017-01-10 ~ 2017-12-10 → 11개월
  • 2018-12-31 ~ 2015-01-02 → 47개월
  • 2020-03-01 ~ 2019-06-15 → 8개월

참고로 TIMESTAMPDIFF 함수의 단위는 MONTH 외에도 YEAR(년), QUARTER(분기), WEEK(주), DAY(일), HOUR(시), MINUTE(분), SECOND(초) 등을 사용할 수 있습니다. 따라서 필요에 따라 단위만 바꿔 주면 다양한 형태의 기간 계산에 그대로 활용할 수 있습니다.