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년이 제대로 나오는 모습을 알 수 있다.
결론
데이터베이스는 똑똑해서 알아서 윤년 계산 해주니 뻘짓하지말자.
'오류, 기능, 문제해결(SQL)' 카테고리의 다른 글
| ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) MacOs 기준 (0) | 2025.04.24 |
|---|---|
| INNER JOIN, LEFT JOIN 차이점 (1) | 2024.12.04 |
| Invalid use of group function 해결 / WHERE, HAVING 차이? (1) | 2024.12.03 |
| SQL 명령어 사용법 기억날 때 마다 와서 써놓기 (0) | 2024.11.27 |