mysql 시간 차이 계산하기

형기브·2023년 8월 7일

SQL

목록 보기
4/5

문제

문제는 프로그래머스의 오랜 기간 보호한 동물(2)

보호한 기간이 긴 순서대로 나열하는 문제였다.

mysql의 datetime() 함수와 timediff() 함수를 사용해서 문제를 풀었다.

그런데 datetime은 날짜 차이만 알 수 있어서 나는 날짜와 시간을 모두 고려한 시간 차이를 알고 싶었다.

SELECT o.ANIMAL_ID, o.NAME  from ANIMAL_OUTS o 
inner join ANIMAL_INS i on o.ANIMAL_ID = i.ANIMAL_ID
ORDER BY datediff(o.datetime, i.datetime) DESC
limit 2

그런데 timediff()를 쓰니 계속 오답이 떴다.

시도

time_to_sec(timediff(o.DATETIME,i.DATETIME))

시간 차이를 초차이로 반환하게 했는데도 오답.

이유는... timediff는 날짜를 포함하지 않는다. 시,분,초 만 계산한다.
즉, 날짜 차이를 알 수 없다!!

해결

즉 날짜 차이와 시간차이를 모두 고려하려면

TIMESTAMPDIFF(차이 기준, datetime1, datetime2) 함수를 사용하면 된다!

차이 기준은 day , hour, minute, second 등이 가능하다.

SELECT o.ANIMAL_ID, o.NAME  from ANIMAL_OUTS o 
inner join ANIMAL_INS i on o.ANIMAL_ID = i.ANIMAL_ID
ORDER BY TIMESTAMPDIFF(SECOND, i.DATETIME, o.DATETIME) DESC
limit 2

2017-01-10 10:44:002016-01-27 12:27:00 의 초 차이인 30147420를 가지고 정렬할 수 있는 것이다.

알게된 점

sql에는 이렇게 다양한 함수들이 존재하는구나...

많이 써보면서 함수들을 익히는 수 밖에 없겠다.

profile
Slow but Steady

0개의 댓글