Solved

computed age column

Posted on 2014-04-17
6
414 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 32

Accepted Solution

by:
Big Monty earned 250 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 69

Assisted Solution

by:ScottPletcher
ScottPletcher earned 250 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
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 
LVL 69

Expert Comment

by:ScottPletcher
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 69

Expert Comment

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

Featured Post

Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.
Using examples as well as descriptions, and references to Books Online, show the documentation available for datatypes, explain the available data types and show how data can be passed into and out of variables.

920 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now