?
Solved

computed age column

Posted on 2014-04-17
6
Medium Priority
?
460 Views
Last Modified: 2014-04-18
I want a computed age column based on DOB.  What the best way to do this?  Is there a built in age function?
0
Comment
Question by:HLRosenberger
  • 3
  • 2
6 Comments
 
LVL 34

Accepted Solution

by:
Big Monty earned 1000 total points
ID: 40007048
no, but you can do something like this:

DECLARE @dob  datetime
SET @dob='1992-01-09 00:00:00'

SELECT DATEDIFF(hour,@dob,GETDATE())/8766.0 AS AgeYearsDecimal
    ,CONVERT(int,ROUND(DATEDIFF(hour,@dob,GETDATE())/8766.0,0)) AS AgeYearsIntRound
    ,DATEDIFF(hour,@dob,GETDATE())/8766 AS AgeYearsIntTrunc

Open in new window

0
 
LVL 70

Assisted Solution

by:Scott Pletcher
Scott Pletcher earned 1000 total points
ID: 40007135
>> What the best way to do this? <<

Here's my preferred method.

SELECT
    DATEDIFF(YEAR, dob, GETDATE()) - CASE WHEN CONVERT(char(5), dob, 1) > CONVERT(char(5), GETDATE(), 1) THEN 1 ELSE 0 END as age

Leap year birthdays are the tricky part.  The code above treats Mar 1 as the birthday for someone born on Feb 29.  Code will need adjusted if you need to consider Feb 28 their birthday in non-leap years (believe it or not, some govts actually have laws on how this needs calculated, esp. for retirement, years-of-service, etc.).



>>  Is there a built-in age function? <<
No.
0
 
LVL 1

Author Closing Comment

by:HLRosenberger
ID: 40009258
thanks!
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 40009345
Interesting choice.  Exactly one year (or nn years) after my birthday, shouldn't I be one year (or nn years) old?!


DECLARE @dob  datetime
SET @dob=DATEADD(YEAR, -1, GETDATE())

SELECT @dob AS date_of_birth, GETDATE() AS todays_date,
    DATEDIFF(hour,@dob,GETDATE())/8766 AS AgeYearsIntTrunc


SET @dob=DATEADD(YEAR, -10, GETDATE())

SELECT @dob AS date_of_birth, GETDATE() AS todays_date,
    DATEDIFF(hour,@dob,GETDATE())/8766 AS AgeYearsIntTrunc
0
 
LVL 1

Author Comment

by:HLRosenberger
ID: 40009435
ScottPletcher

I do not follow.  I'm working with both solutions trying to get he correct age.
0
 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 40009584
OK, good luck.  I can't imagine that an hours-based method could ever be fully accurate.
0

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
What if you have to shut down the entire Citrix infrastructure for hardware maintenance, software upgrades or "the unknown"? I developed this plan for "the unknown" and hope that it helps you as well. This article explains how to properly shut down …
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…
Stellar Phoenix SQL Database Repair software easily fixes the suspect mode issue of SQL Server database. It is a simple process to bring the database from suspect mode to normal mode. Check out the video and fix the SQL database suspect mode problem.

569 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question