MySQL에서 날짜 함수를 사용해 날짜 또는 시간 게산을 하는 방법을 알아보겠습니다.
날짜와 시간 계산에 관련된 함수가 어떤 것이 있는지 먼저 간단히 보겠습니다.
- DATEDIFF() – 두 기간 사이의 일수 계산
- TIMEDIFF() – 두 기간 사이의 시간 계산
- PERIOD_DIFF() – 두 기간 사이의 개월 수 계산
- TIMESTAMPDIFF() – 두 기간 사이의 시간 계산
DATEDIFF
두 기간 사이의 일수를 계산하는 함수로 DATEDIFF가 있습니다.
DATEDIFF(expr, expr2)
- expr – 종료일
- expr2 – 시작일
개시일부터 종료일까지 일수를 취득해 반환합니다.
SELECT DATEDIFF('2021-12-31','2021-01-20');
-> 345
SELECT DATEDIFF('2021-12-31','2022-01-20');
-> -20
SELECT DATEDIFF('2021-12-31', CURRENT_DATE());
-> -7
expr, expr2에는 날짜 포맷을 YYYY-MM-DD 또는 YYYY-MM-DD HH:MM:SS[.fraction] 형태로 지정합니다.
날짜 포맷에 시간이 포함되어 있는 경우에는 시간은 계산에 포함하지 않습니다.
SELECT DATEDIFF('2021-12-31 11:11:00','2021-01-20 13:00:00');
-> 345
날짜 범위에서 벗어날 값을 입력한 경우에는 NULL을 반환합니다.
SELECT DATEDIFF('2021-12-31','2021-13-20');
-> NULL
TIMEDIFF
두 기간 사이의 시간을 계산하는 함수로 TIMEDIFF가 있습니다.
TIMEDIFF(expr, expr2)
- expr – 종료 시간
- expr2 – 시작 시간
SELECT TIMEDIFF('2022-02-01 23:00:00','2022-01-30 00:00:00');
-> 71:00:00
SELECT TIMEDIFF('2021-12-31 23:00:00','2022-01-01 00:00:00.000000');
-> -01:00:00.000000
SELECT TIMEDIFF('2022-01-02 00:00:00',CURRENT_TIMESTAMP());
-> -135:51:10
SELECT TIMEDIFF('11:30:00','00:00:00');
-> 11:30:00
expr, expr2에는 시간 포맷 HH:MM:SS 또는 날짜를 포함한 시간인 YYYY-MM-DD HH:MM:SS[.fraction] 형태로 지정합니다.
시간 또는 날짜 범위에서 벗어난 값을 지정한 경우에는 NULL을 반환합니다.
SELECT TIMEDIFF('2022-01-02 00:00:00','2022-13-02 00:00:00');
-> NULL
PERIOD_DIFF
두 기간 사이의 개월 수 차이를 계산하는 함수로 PERIOD_DIFF가 있습니다.
PERIOD_DIFF(P1, P2)
- P1 – 시작 년월
- P2 – 종료 년월
SELECT PERIOD_DIFF('202202','202112');
-> 2
SELECT PERIOD_DIFF('202202','201212');
-> -10
SELECT PERIOD_DIFF('2202','1912');
-> 26
P1, P2에는 YYYYMM 또는 YYMM 형식으로 값을 지정합니다.
날짜는 지정하지 않습니다.
PERIOD_DIFF 함수는 DATEDIFF(), TIMEDIFF()와 다르게 이상한 값을 설정한 경우에 NULL이 아닌 의도치 않은 결과값을 반환합니다.
SELECT PERIOD_DIFF('202212','20a214');
-> 256
파라미터 값을 지정할 때 주의해서 해야 합니다.
TIMESTAMPDIFF
시간 또는 개월 수 등 여러 가지 형태의 계산을 할 수 있는 함수로 TIMESTAMPDIFF가 있습니다.
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
- unit – 반환 값 형식
- datetime_expr1 – 시작일
- datetime_expr2 – 종료일
SELECT TIMESTAMPDIFF(MONTH,'2021-02-01','2022-03-01');
-> 13
SELECT TIMESTAMPDIFF(YEAR,'2021-02-01','2022-03-01');
-> 1
SELECT TIMESTAMPDIFF(HOUR,'2022-02-01','2022-02-03');
-> 48
반환 값은 MONTH, YEAR, HOUR 이외에도 여러 가지 반환 값을 지정할 수 있습니다.
파라미터 종류 | 내용 |
---|---|
FRAC_SECOND (MICROSECOND) | 마이크로 초 |
SECOND | 초 |
MINUTE | 분 |
HOUR | 시간 |
DAY | 일 |
WEEK | 주 |
MONTH | 월 |
QUARTER | 분기 |
YEAR | 년 |
MySQL 5.1.24 이후부터는 마이크로초 단위를 MICROSECOND로 지정할 수 있습니다.
FRAC_SECOND 대신에 MICROSECOND를 사용하는 것이 좋습니다.
댓글