mysql 만나이 계산 윤년 쿼리 TIMESTAMPDIFF age calculation



만 나이를 계산하는 SQL 쿼리는 데이터베이스 시스템에 따라 조금씩 다를 수 있습니다.
아래는 MySQL을 사용하는 경우의 예시입니다:

sql

SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) - (DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(birthdate, '%m%d')) AS age
FROM your_table;


혹은

SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE())
       CASE WHEN DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(birthdate, '%m%d')
            THEN 1
            ELSE 0
       END AS age
FROM 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 age
FROM 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세로 나온다.




Written by dukgun.com

Post a Comment

다음 이전