MySQL 날짜, 시간 계산 DATEDIFF, TIMEDIFF 사용 방법

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를 사용하는 것이 좋습니다.

댓글