[MySQL] 날짜/시간 다루기 (2) 연산하기
1. 날짜에 시간 간격을 더하기 or 빼기
SELECT DATE_ADD('2022-05-04', INTERVAL 1 DAY);
-- OUTPUT: '2022-05-05'
SELECT DATE_ADD('2022-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND);
-- OUTPUT: '2023-01-01 00:01:00'
SELECT DATE_ADD('2022-05-04', INTERVAL -1 DAY)
-- OUTPUT: '2022-05-03'
SELECT DATE_SUB('2022-05-04', INTERVAL 1 DAY);
-- OUTPUT: '2022-05-03'
DATE_ADD(date, INTERVAL expr unit)
- date에서 INTERVAL 뒤에 작성한 시간 또는 날짜만큼 더해준다.
DATE_SUB(date, INTERVAL expr unit)
- date에서 INTERVAL 뒤에 작성한 시간 또는 날짜만큼 빼준다.
2. 두 날짜의 차이 계산하기 (일 단위로 계산)
SELECT DATEDIFF('2022-05-04', '2022-05-03');
-- OUTPUT: 1
SELECT DATEDIFF('2022-05-30 23:59:59','2022-05-28 00:00:00');
-- OUTPUT: 2
-- 시간까지 따지면 3일에 가까운 차이가 나지만 날짜부분만 갖고 계산하므로
-- 2일이 출력된다.
DATEDIFF(expr1, expr2)
- expr1의 날짜에서 expr2의 날짜를 빼서 두 날짜의 차이를 계산해준다. (expr1 − expr2)
- expr1 과 expr2 는 DATE or DATETIME expressions. 오직 DATE(날짜) 부분만 계산에 사용된다.
3. 두 날짜 or 시간의 차이 계산하기
(1) TIMEDIFF → TIME 단위로 계산한 후, 출력도 TIME 으로
SELECT TIMEDIFF('11:59:59', '08:00:00');
-- OUTPUT: 03:59:59
-- (= 3시간 59분 59초)
SELECT TIMEDIFF('2022-05-30 11:59:59', '2022-05-30 08:00:00');
-- OUTPUT: 03:59:59
-- (= 3시간 59분 59초)
SELECT TIMEDIFF('2022-05-31 11:59:59', '2022-05-30 08:00:00');
-- OUTPUT: 27:59:59
-- (= 27시간 59분 59초)
SELECT TIMEDIFF('2022-05-31', '2022-05-30');
-- OUTPUT: 00:00:00
-- (TIME 부분 없이 작성하면 이렇게 출력된다)
TIMEDIFF(expr1, expr2)
- expr1 에서 expr2 를 뺀 다음, 그 결과를 시간 타입으로 출력해준다. (expr1 − expr2)
- expr1 과 expr2 는 TIME or DATETIME expressions.
(2) TIMESTAMPDIFF → TIME 단위로 계산한 후, 출력은 원하는 단위로
SELECT TIMESTAMPDIFF(DAY, '2022-05-01', '2022-05-31');
-- OUTPUT: 30
-- (= 30일)
SELECT TIMESTAMPDIFF(DAY, '2022-05-01 08:00:00', '2022-05-31 23:59:59');
-- OUTPUT: 30
-- (= 30일)
SELECT TIMESTAMPDIFF(DAY, '2022-05-01', '2022-05-31 23:59:59');
-- OUTPUT: 30
-- (= 30일)
SELECT TIMESTAMPDIFF(HOUR, '2022-05-01 08:00:00', '2022-05-31 23:59:59');
-- OUTPUT: 735
-- (= 735시간)
SELECT TIMESTAMPDIFF(SECOND, '2022-05-01 08:00:00', '2022-05-31 23:59:59');
-- OUTPUT: 2649599
-- (= 2,649,599초)
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
- datetime_expr2 에서 datetime_expr1 을 뺀 다음, 그 결과를 unit 부분에 작성한 단위에 맞춰 integer로 출력해준다. ( datetime_expr2 − datetime_expr1)
- datetime_expr1 과 datetime_expr2 는 DATE or DATETIME expressions. 만약 하나가 DATE 이고, 다른 하나가 DATETIME 이라면, DATE의 시간 부분을 '00:00:00' 이라고 처리한다.