집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 나이를 계산하는 5가지 방법과 각각의 장단점을 요약합니다.
저는 이전에 mysql을 잘 사용하지 않았고, mysql 기능에 대해 잘 알지도 못했는데, 이 문제를 접하고 바로 바이두를 검색해보니 이 두 가지 방법이 바이두 블로그에서 1위를 차지했습니다.
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age
방법 1에서도 작성자가 결함을 지적했습니다. 즉, 날짜가 미래 날짜인 경우 결과가 음수가 아닌 0이 되고, 여기서는 두 가지 작업이 사용됩니다.
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age
방법 2는 방법 1의 음수 문제를 해결하지만 여기서는 6개의 함수와 3개의 연산자가 사용되어 좀 더 복잡해 보입니다.
이 게시물을 읽고 깜짝 놀랐습니다. 이전에는 SQL Server를 사용하는 것이 어떻게 그렇게 복잡할 수 있습니까? 저는 간단하고 효율적인 방법이 있어야 한다고 굳게 믿습니다. 위의 방법을 기반으로 개선된 방법이 빠르게 발견되었습니다.
SELECT year( from_days( datediff( now( ), birthdate))); SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));
개선된 방법 1, 함수 1개 감소, 연산자 1개 누락 날짜가 미래 날짜인 경우 계산 결과는 여전히 0입니다.
개선된 방법 2에는 여전히 6개의 함수와 3개의 연산자가 있는데, 이는 날짜의 오른쪽 다섯 자리를 취하며 날짜 형식이 '2013-01-01'이면 문제가 없습니다. 날짜 형식이 '2013-1-1' 약식 형식인 경우 오른쪽 다섯 자리가 '3-1-1'로 빠져서 오류가 발생합니다.
그런 다음 MYSQL 도움말 문서의 날짜 기능을 기반으로 세 번째 방법을 생각했습니다.
SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)
현재 생일과 이전 일 수를 가져옵니다. 날짜를 1로 나눈 1년의 실제 일수(365일, 5시간, 48분 46초)를 반올림합니다. 이는 세 가지 함수와 하나의 연산자만 사용합니다.
그런 다음 외국 웹사이트에서 네 번째 방법을 빨리 찾았습니다.
SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())
이 방법은 두 가지 기능만 사용하여 수행하므로 가장 좋은 방법입니다. .
위의 4가지 방법을 테스트해봤습니다. 현재 날짜가 '2017-1-13'이고 생일이 '2013-1-14'라면 생일이 하루 남았으니, 즉 4살이 됩니다. 이제 하루 밖에 남지 않았는데 결과가 아직 3년이나 남았으니 방법 3을 수정하고 라운드하여 방법 5를 얻으세요.
SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)
나이 이런 식으로 계산한 것이 실제 연령에 1년 더 가깝습니다. 가장 가깝지만 아마도 방법 4가 연령 정의와 가장 일치할 것입니다.
[관련 추천]
3. 불린 교육 Yan Shiba mysql 소개 영상 튜토리얼
위 내용은 MySQL에서 나이를 계산하는 5가지 방법과 각각의 장단점을 요약합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!