데이터 처리 도구/SQL

[MySQL] 날짜/시간 다루기 (2) 연산하기

yourhm 2022. 8. 30. 11:03

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' 이라고 처리한다.