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' 등)에 맞게 포맷 지정자를 설정해야 올바른 결과를 얻을 수 있습니다.