RDBS/MYSQL

[MYSQL]함수를 활용한 날짜 및 시간 연산

MoonSta 2023. 1. 10. 13:31

날짜 및 시간 연산

실제 데이터를 다루면서 특정 데이터의 날짜 및 시간에 대한 연산이 필요한 경우가 있습니다. 이러한 상황에서 MySQL이 제공해주는 시간 및 날짜 연산 함수를 사용하여 해결할 수 있습니다. 이번 포스팅에선 연산 함수에 대해 알아보고 직접 실습해보도록 하겠습니다.

 

MySQL-시간 및 날짜 연산 함수

함수 기능
DATE_ADD() 일정 기간 만큼 더해줌
DATE_SUB() 일정 기간 만큼 빼줌
DATEDIFF() 두 시점의 사이의 일수 계산
TIMEDIFF() 두 시점의 사이의 시간 계산
PERIOD_DIFF() 두 시점의 사이의 월 계산
TIMESTAMPDIFF() 두 시점의 사이의 시간 계산

위와 같은 함수를 통해 시간 및 날짜에 대한 연산을 할 수 있습니다. 예제와 함께 자세하게 알아보도록 하겠습니다.

 

DATE_ADD(기준 시점, INTERVAL)

SELECT NOW()
     , DATE_ADD(NOW(), INTERVAL 1 YEAR)
     , DATE_ADD(NOW(), INTERVAL 1 MONTH)
     , DATE_ADD(NOW(), INTERVAL 1 DAY)
     , DATE_ADD(NOW(), INTERVAL 1 HOUR)
     , DATE_ADD(NOW(), INTERVAL 1 MINUTE)
     , DATE_ADD(NOW(), INTERVAL 1 SECOND);

DATE_SUB(기준 시점, INTERVAL)

SELECT NOW()
     , DATE_SUB(NOW(), INTERVAL 1 YEAR)
     , DATE_SUB(NOW(), INTERVAL 1 MONTH)
     , DATE_SUB(NOW(), INTERVAL 1 DAY)
     , DATE_SUB(NOW(), INTERVAL 1 HOUR)
     , DATE_SUB(NOW(), INTERVAL 1 MINUTE)
     , DATE_SUB(NOW(), INTERVAL 1 SECOND);

DATE_ADD, DATE_SUB 함수를 사용하면 기준 시점에서 INTERVAL만큼 증감이 가능하다. 

 

DATEDIFF(종료일자, 시작일자)

-- 일수 차이 반환
SELECT DATEDIFF(NOW(), '2023-01-01');

 

TIMEDIFF(종료시간, 시작시간)

-- 시간 차이 반환
SELECT TIMEDIFF(NOW(), '2023-01-03 00:00:00');

 

PERIOD_DIFF(종료월 시작월)

SELECT period_diff('202301', '202205');

위 함수는 타 함수와는 다르게 날짜 및 시간을 지정하지 않습니다. 또한 인자에는 YYMM, YYYYMM으로 설정해주어야 연산할 수 있습니다.

 

TIMESTAMPDIFF(반환 형식, 시작시점, 종료시점)

SELECT TIMESTAMPDIFF(YEAR, '2023-01-01', NOW());

SELECT TIMESTAMPDIFF(MONTH, '2023-01-01', NOW());

SELECT TIMESTAMPDIFF(DAY, '2023-01-01', NOW());

 

위 함수는 타 함수와는 다르게 기준 인자의 순서가 다릅니다.