집 >데이터 베이스 >MySQL 튜토리얼 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!