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

MySQL에서 현재 날짜와 날짜 필드 간의 일수 차이 구하는 방법

MySQL DATEDIFF 함수로 현재 날짜와 날짜 필드 사이의 일수 구하기

현재 날짜와 테이블에 저장된 날짜 필드 사이의 일수를 계산하려면 DATEDIFF(), CURDATE(), STR_TO_DATE() 함수를 함께 사용하면 됩니다.

기본 문법

SELECT DATEDIFF(CURDATE(), STR_TO_DATE(yourColumnName, '%d-%m-%Y')) AS anyAliasName FROM yourTableName;

각 함수의 역할은 다음과 같습니다.

  • CURDATE(): 현재 시스템 날짜를 반환합니다.
  • STR_TO_DATE(): 문자열로 저장된 날짜를 지정한 형식에 따라 DATE 타입으로 변환합니다.
  • DATEDIFF(): 두 날짜 사이의 일수 차이를 반환합니다.

예제 테이블 생성

문법을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table DateDifferenceDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ArrivalDate varchar(100)
    -> );
Query OK, 0 rows affected (0.55 sec)

샘플 데이터 삽입

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다. 이 예제에서는 날짜가 '일-월-년(%d-%m-%Y)' 형식의 문자열로 저장되어 있습니다.

mysql> insert into DateDifferenceDemo(ArrivalDate) values('12-10-2011');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DateDifferenceDemo(ArrivalDate) values('01-12-2013');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DateDifferenceDemo(ArrivalDate) values('31-10-2014');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DateDifferenceDemo(ArrivalDate) values('12-04-2016');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DateDifferenceDemo(ArrivalDate) values('20-08-2018');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DateDifferenceDemo(ArrivalDate) values('11-03-2019');
Query OK, 1 row affected (0.07 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DateDifferenceDemo;

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

+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 1  | 12-10-2011  |
| 2  | 01-12-2013  |
| 3  | 31-10-2014  |
| 4  | 12-04-2016  |
| 5  | 20-08-2018  |
| 6  | 11-03-2019  |
+----+-------------+
6 rows in set (0.00 sec)

일수 차이 계산 쿼리 실행

이제 현재 날짜와 ArrivalDate 필드 사이의 일수를 구하는 쿼리를 실행합니다. STR_TO_DATE() 함수로 문자열 날짜를 '%d-%m-%Y' 형식으로 변환한 뒤 DATEDIFF()에 전달하는 것이 핵심입니다.

mysql> SELECT DATEDIFF(CURDATE(),STR_TO_DATE(ArrivalDate, '%d-%m-%Y')) AS NumberOfDays from DateDifferenceDemo;

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

+--------------+
| NumberOfDays |
+--------------+
| 2708         |
| 1927         |
| 1593         |
| 1064         |
| 204          |
| 1            |
+--------------+
6 rows in set (0.00 sec)

참고 사항

날짜가 이미 DATE 또는 DATETIME 타입으로 저장되어 있다면 STR_TO_DATE() 변환 없이 DATEDIFF(CURDATE(), yourColumnName)만으로도 간단히 계산할 수 있습니다. 문자열 형태의 날짜를 다룰 때는 반드시 실제 저장된 형식('%d-%m-%Y', '%Y-%m-%d' 등)에 맞게 포맷 지정자를 설정해야 올바른 결과를 얻을 수 있습니다.