SQL Server Computed Column Specification for Age

Posted on 2014-01-02
Last Modified: 2014-01-02
Can anyone see my syntax error?

I get following message: Error validating the formula for column 'Age'.

(case when dayofyear([BirthDate]) < dayofyear(getdate()) then datediff(year,[BirthDate],getdate())-1 else  datediff(year,[BirthDate],getdate()) end)

Question by:CloudApps
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 20

Accepted Solution

dsacker earned 500 total points
ID: 39751765
DayOfYear is not a function (unless you wrote one). Use this definition for your computed column:

    WHEN DATEPART(dayofyear, BirthDate) < DATEPART(dayofyear, GETDATE())
         THEN DATEDIFF(YEAR, BirthDate, GETDATE()) - 1

Open in new window

I separated it out for readability (and to verify it worked). Return it to one line or however you wish to lower-case it.
LVL 29

Expert Comment

ID: 39751777
select DATEDIFF(dayofyear, BirthDate, getdate()) -1 

Open in new window

LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 39751782
I presume dayofyear is a customer function, in which case you have to prefix it with the functions' owner name:

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

LVL 29

Expert Comment

ID: 39751815
Is dayofyear a sql server 2012 function - a new feature in sql server?
LVL 60

Expert Comment

by:Kevin Cross
ID: 39751908
You may find this thread helpful:

Scott's approach is similar to dsacker's above, except he eliminated the repetition of the DATEDIFF by putting the CASE on the subtraction.

In other words, you can do this:
DATEDIFF(YEAR, BirthDate, GETDATE()) - CASE WHEN DATEPART(dayofyear, BirthDate) < DATEPART(dayofyear, GETDATE()) THEN  1 ELSE 0 END

Author Closing Comment

ID: 39751963

Thanks for figuring out what I was trying to accomplish. Your syntax worked to solve the problem.

Sorry, to very one else for the poor presentation of my problem.

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
What type of testing am I doing? 4 77
mssql 7 32
Restore a log backup compressed 3 17
Sql group by orderdate and ordertotal 3 12
Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.

752 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