만 나이를 계산하는 SQL 쿼리는 데이터베이스 시스템에 따라 조금씩 다를 수 있습니다.
아래는 MySQL을 사용하는 경우의 예시입니다:
sql
SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) - (DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(birthdate, '%m%d')) AS ageFROM your_table;
혹은
SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) -CASE WHEN DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(birthdate, '%m%d')THEN 1ELSE 0END AS ageFROM your_table;
이 쿼리에서 your_table을 실제 테이블 이름으로 바꾸고, birthdate는 생년월일을 저장하는 컬럼 이름으로 대체해야 합니다. 이를 참고하여 데이터베이스 시스템에 따라 문법을 조정할 수 있습니다.
윤년이 있는 2020년 2월 29일과 2024년 2월 29일 경으로 계산을 해보았다.
SELECT TIMESTAMPDIFF(YEAR, '20200229', '20240228') - (DATE_FORMAT('20240228', '%m%d') < DATE_FORMAT('20200229', '%m%d')) AS age;
=> 2
SELECT TIMESTAMPDIFF(YEAR, '20200229', '20240229') - (DATE_FORMAT('20240229', '%m%d') < DATE_FORMAT('20200229', '%m%d')) AS age;
FROM DUAL;
=> 4
2020년 2월 29 생일인 경우, 2024년 2월 28일은 아직 만 3세인데,
만 2세로 나온다.
뒷부분의 월일 비교는 안해도 되는게 맞아보인다.
SELECT TIMESTAMPDIFF(YEAR, '20200229', '20240228') AS age;
=> 3
SELECT TIMESTAMPDIFF(YEAR, '20200228', '20240229') AS age;
=> 4
SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) AS ageFROM your_table;
나이 차이를 365로 나누는 쿼리가 있다.
SELECT TRUNCATE((TO_DAYS(NOW()) - TO_DAYS(birthdate)) / 365, 0);
위와 같이 단순히 365로 나눴을때 윤년이 있는 경우 이상하게 나온다.
SELECT TRUNCATE((TO_DAYS('20240228') - TO_DAYS('20200229')) / 365, 0);
=> 4
SELECT TRUNCATE((TO_DAYS('20240229') - TO_DAYS('20200229')) / 365, 0);
=> 4
SELECT TRUNCATE((TO_DAYS('20240301') - TO_DAYS('20200229')) / 365, 0);
=> 4
2020년 2월 29 생일인 경우, 2024년 2월 28일은 아직 만 3세인데,
만 4세로 나온다.
댓글 쓰기