241118 TIL - SQL 날짜, 시간 차이 계산하기

J_log·2024년 11월 18일
0

SQL에서 데이터에서 날짜를 비교해야되는 문제가 있었다. 전날보다 온도가 더 오른 목록을 출력하는 문제였음. MySQL에서 날짜 차이를 구하기 위해 여러가지 방법이 있는데 정리해서 작성해 보려고 한다.

DATE_ADD & DATE_SUB

  • 먼저 기준 날짜에 입력된 기간만큼 더하거나 빼는 함수이다.
  • 결과 : 새로 계산된 날짜 반환.

더하기

DATE_ADD(기준 날짜, INTERVAL);
SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE);
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR);
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR);

빼기

DATE_SUB(기준 날짜, INTERVAL);
SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND);
SELECT DATE_SUB(NOW(), INTERVAL 1 MINUTE);
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);
SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);


DATEDIFF & TIMESTAMPDIFF

  • 간단하게 일(day) 차이를 구할 때는 DATEDIFF를 사용.
  • 연, 월, 시간, 초 등을 지정하여 구할 때는 TIMESTAMPDIFF를 사용.
  • 결과 :
    • 두 날짜 사이의 일 수 반환(DATEDIFF)
    • 두 날짜 간의 차이를 정수 값으로 반환(TIMESTAMPDIFF)

DATEDIFF(날짜1, 날짜2);
날짜1 - 날짜2로 계산된다.

SELECT DATEDIFF('2022-08-26', '2022-08-01') FROM DUAL;
//	25

SELECT DATEDIFF('2022-08-26 16:33:20', '2022-08-01 00:00:00') FROM DUAL;
//	25

SELECT DATEDIFF('2022-08-01', '2022-08-25') FROM DUAL;
//	-25

TIMESTAMPDIFF(단위, 날짜1, 날짜2);

단위 종류

  • SECOND : 초
  • MINUTE : 분
  • HOUR : 시간
  • DAY : 일
  • WEEK : 주
  • MONTH : 월
  • QUARTER : 분기
  • YEAR : 연도
SELECT TIMESTAMPDIFF(SECOND, '2022-08-26 15:30:33', '2022-08-26 15:32:21') FROM DUAL;
//	108

SELECT TIMESTAMPDIFF(MINUTE, '2022-08-26 15:30:33', '2022-08-26 15:32:21') FROM DUAL;
//	1 -> 108초는 2분이 아니기 때문에 1분으로 조회

SELECT TIMESTAMPDIFF(HOUR, '2022-08-26 15:30:33', '2022-08-26 17:32:21') FROM DUAL;
//	2

SELECT TIMESTAMPDIFF(DAY, '2022-08-26 15:30:33', '2022-09-01 17:32:21') FROM DUAL;
//	6

SELECT TIMESTAMPDIFF(WEEK, '2022-08-26 15:30:33', '2022-09-01 17:32:21') FROM DUAL;
//	0 -> 1주일인 7일이 안지났기 때문에 0 으로 조회

SELECT TIMESTAMPDIFF(MONTH, '2022-08-26 15:30:33', '2022-12-01 17:32:21') FROM DUAL;
//	3

SELECT TIMESTAMPDIFF(QUARTER, '2022-08-26 15:30:33', '2023-02-01 17:32:21') FROM DUAL;
//	1 -> 1분기(3개월) 씩이므로 6개월이 안지났기 때문에 1으로 조회

SELECT TIMESTAMPDIFF(QUARTER, '2022-08-26 15:30:33', '2023-02-01 17:32:21') FROM DUAL;
//	0 -> 1년(12개월)이 안지났기 때문에 0으로 조회

참고 : https://dev-jwblog.tistory.com/137


주요 차이점

함수주 목적반환 값주요 사용 사례
DATE_ADD날짜/시간에 기간을 더하거나 빼기날짜일정 계산, 만료일 계산
DATEDIFF두 날짜 간의 '일' 차이 계산정수 (일 수)특정 날짜 사이의 일자 차이 계산
TIMESTAMPDIFF두 날짜/시간 간의 차이를 단위별로 계산정수 (초, 분, 일 등)시간 단위 계산, 이벤트 간 시간 차이 비교

어떤 경우에 어떤 함수를 사용할까?

날짜를 직접 변경해야 하는 경우 : DATE_ADD, DATE_SUB

  • 예) 특정 날짜에 7일을 더하거나 빼기.

날짜 간의 차이를 '일(day)' 단위로만 알고 싶을 때 : DATEDIFF

  • 예) 특정 이벤트 사이의 일자 차이 계산.

두 날짜/시간 간의 차이를 다른 단위 (시간, 분, 초 등)로 계산할 때 : TIMESTAMPDIFF

  • 예) 두 이벤트 사이의 시간 간격 계산.

0개의 댓글