오류, 기능, 문제해결(SQL)

TIMESTAMPDIFF가 알아서 윤년을 포함할까?

seungmin576 2024. 12. 4. 16:05

5년 이상 근무한 사람을 찾으라는 문제에

아래 쿼리문의 첫 쿼리처럼만 쓰면되겠지? 하며 쓰던 도중 "MYSQL이 윤년까지 계산하면서 년수를 생각하나?" 라는 의구심이들었음.

SELECT 
    COUNT(1) AS "5년 이상 근무한 의사 수"
FROM doctors
WHERE TIMESTAMPDIFF(YEAR, hire_date, NOW()) >= 5

SELECT 
	COUNT(1) AS "5년 이상 근무한 의사 수"
FROM doctors
WHERE TIMESTAMPDIFF(DAY, DATE_FORMAT(HIRE_DATE, '%Y%m%d'), DATE_FORMAT(NOW(), '%Y%m%d')) >= 365*5+1

그래서 밑의 쿼리처럼 써야하나? 의구심이 갑자기 드는 것이다..

실험을 직접하기로 해봄.

 

현재 날짜에서 5년전은 년도를 5년 빼면되니 2019/12/04이다

 

근데 날짜를 보니 내가 생각한 365*5+1의 결과값인 1826이 아닌 1827이 나온다.

날짜 차이를 계산할때는 1826이 아니었던 것이다..

여기서부터 내 머리가 멍청이라 도대체 왜 1826이 아닌 1827일이 나오는지 모르겠는데 일단 인공지능 친구 뤼튼한테 물어봐도 1827이 이 맞다고 함

생각해보니 19년도 입사하면 20년, 24년에 윤년이 두번이라 틀린거였음!!!

아무튼 이걸 DATE_FORMAT함수도 빼고 YEAR로 바꾸면 5년이 나오는지 확인

 

5년이 제대로 나오는 모습을 알 수 있다.

결론

데이터베이스는 똑똑해서 알아서 윤년 계산 해주니 뻘짓하지말자.