문제는 프로그래머스의 오랜 기간 보호한 동물(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:00과 2016-01-27 12:27:00 의 초 차이인 30147420를 가지고 정렬할 수 있는 것이다.
sql에는 이렇게 다양한 함수들이 존재하는구나...
많이 써보면서 함수들을 익히는 수 밖에 없겠다.