"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

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

Posted on 2025-03-23
Browse:865

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

Accurately calculate the age of the date of birth in SQL Server

question:

How to convert the date of birth stored as nvarchar(25) into a date in SQL Server and then calculate its corresponding age in years?

Sample data:

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

Expected output:

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

Answer: Accurately calculate age

]

The initially proposed approach faces challenges in considering the irregularities of leap years and month days. Modern SQL Server versions provide us with improved techniques to address these complexities.

The best way to calculate the age of integers:

This method is simple and straightforward, but the accuracy may be slightly lower than the decimal method.

SELECT
    (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) 

The best way to calculate age of decimals:

This method uses the DATEDIFF function and the CASE statement to accurately calculate the age, and consider whether the birthday has passed in that year.

SELECT
    DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) 

Note that the above code assumes that the DOB column has been converted to the DATE type. If DOB is still of the nvarchar(25) type, you need to add a type conversion in the query, for example: CONVERT(DATE, DOB, 120). Choosing the appropriate conversion style depends on the specific format of your DOB data. For example, CONVERT(DATE, DOB, 120) is suitable for the 'yyyy-mm-dd hh:mi:ss' format. You may need to adjust this section to suit your data format. The final query should be similar to:

SELECT
    DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) 

Replace YourTable with your table name. The method of choosing an integer or decimal depends on your precision requirements. The decimal method is more accurate, but the integer method is more concise.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3