>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 생년월일을 기준으로 나이를 정확하게 계산하는 방법은 무엇입니까?

SQL Server에서 생년월일을 기준으로 나이를 정확하게 계산하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-22 13:41:10131검색

How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

SQL Server에서 생년월일별 나이를 정확하게 계산

질문:

nvarchar(25)로 저장된 생년월일을 SQL Server의 날짜로 변환한 후 해당 연령을 연 단위로 계산하는 방법은 무엇입니까?

샘플 데이터:

ID Name DOB
1 John 1992-01-09 00:00:00
2 Sally 1959-05-20 00:00:00

예상 출력:

ID Name AGE DOB
1 John 31 1992-01-09 00:00:00
2 Sally 64 1959-05-20 00:00:00

정답: 나이를 정확하게 계산하세요

원래 제안된 방법은 윤년과 월 일수의 불규칙성을 계산하는 데 어려움을 겪었습니다. 최신 SQL Server 버전은 이러한 복잡성을 해결하기 위한 향상된 기술을 제공합니다.

연령을 정수로 계산하는 가장 좋은 방법:

이 방법은 간단하고 직접적이지만 십진법에 비해 정확도가 약간 낮을 수 있습니다.

<code class="language-sql">SELECT
    (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeIntYears
FROM YourTable;</code>

나이를 소수로 계산하는 가장 좋은 방법:

이 방법은 DATEDIFF 함수와 CASE 문을 사용하여 나이를 정확하게 계산하고 해당 연도에 생일이 지났는지 여부를 고려합니다.

<code class="language-sql">SELECT
    DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

위 코드에서는 DOB 컬럼이 DATE 타입으로 변환된 것을 가정하고 있으니 참고하세요. DOB이 여전히 nvarchar(25) 유형인 경우 쿼리에 유형 변환을 추가해야 합니다(예: CONVERT(DATE, DOB, 120)). 적절한 변환 스타일을 선택하는 것은 DOB 데이터의 특정 형식에 따라 다릅니다. 예를 들어 CONVERT(DATE, DOB, 120)은 'yyyy-mm-dd hh:mi:ss' 형식입니다. 데이터 형식에 맞게 이 섹션을 조정해야 할 수도 있습니다. 최종 쿼리는 다음과 같습니다.

<code class="language-sql">SELECT
    DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(CONVERT(DATE, DOB, 120)) OR (MONTH(GETDATE()) = MONTH(CONVERT(DATE, DOB, 120)) AND DAY(GETDATE()) < DAY(CONVERT(DATE, DOB, 120))) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

YourTable을 테이블 이름으로 바꾸세요. 정수 또는 소수 방법 선택은 정밀도 요구 사항에 따라 다릅니다. 십진법이 더 정확하지만 정수법이 더 간결합니다.

위 내용은 SQL Server에서 생년월일을 기준으로 나이를 정확하게 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.