SQL에서 데이터에서 날짜를 비교해야되는 문제가 있었다. 전날보다 온도가 더 오른 목록을 출력하는 문제였음. MySQL에서 날짜 차이를 구하기 위해 여러가지 방법이 있는데 정리해서 작성해 보려고 한다.
더하기
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(날짜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);
단위 종류
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
날짜 간의 차이를 '일(day)' 단위로만 알고 싶을 때 : DATEDIFF
두 날짜/시간 간의 차이를 다른 단위 (시간, 분, 초 등)로 계산할 때 : TIMESTAMPDIFF