Solved

current age

Posted on 2014-10-10
6
102 Views
Last Modified: 2014-10-10
I need two examples of current age in sql.  How can I select all the people in my tblregistrations who are currently 17 and under based on month and also based on date?

Does this work for month?
select * from tblregistrations where FLOOR(DATEDIFF(day, DOB, Month(servertime)) / 365.25) < 18

Does this work for date?
select * from tblregistrations where FLOOR(DATEDIFF(day, DOB, '7/1/2014') / 365.25) < 18
0
Comment
Question by:al4629740
  • 3
  • 2
6 Comments
 
LVL 40

Expert Comment

by:Kyle Abrahams
ID: 40374205
you would need month and year to calculate age.  Month in and of itself tells you nothing.

the 365.25 also doesn't work.  I know you're trying to compensate for leap year but you'll get into rounding issues.

What exactly are you trying to do?
0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40374207
Please try this:
select * 
from tblregistrations
WHERE  YEAR(getdate()) - YEAR(DOB)
        - ( CASE
               WHEN MONTH(DOB) > MONTH(getdate())
                 OR ( MONTH(DOB) = MONTH(getdate())
                    AND DAY(DOB) > DAY(getdate())
                    )
               THEN 1
               ELSE 0
             END )  < 18
             

Open in new window


+edit:
absolutely agree with Kyle anything based on 365.25 is NOT a reliable method
see: MSSQL: Calculating Age (in years) :: right -v- wrong
0
 

Author Comment

by:al4629740
ID: 40374263
There are two different sql statements that I'm working on.

I am trying to retrieve the records for everyone less than 18 based on the servertime for the one.

For the second query, I am trying to get all less than 18 based on a specified DATE. ie 7/1/2014
0
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 
LVL 48

Accepted Solution

by:
PortletPaul earned 500 total points
ID: 40374276
select * 
from tblregistrations
WHERE  YEAR('20140701') - YEAR(DOB)
        - ( CASE
               WHEN MONTH(DOB) > MONTH('20140701')
                 OR ( MONTH(DOB) = MONTH('20140701')
                    AND DAY(DOB) > DAY('20140701')
                    )
               THEN 1
               ELSE 0
             END )  < 18
             

Open in new window


to me 7/1/2014 = 7th Jan 2014, so I see it in YYYYMMDD as this: '20140107'
I suspect you really want '20140701'

just replace
getdate()

with
'20140701'

OR

declare @adate as date = '20140701'

then replace getdate() with @adate
0
 

Author Comment

by:al4629740
ID: 40374286
Curiously, how much extra "query time" does it take to run these type of calculated queries?  Is it heavy?
0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40374312
It's not an ideal filter condition and it will add some effort; how much "slowness" that introduces I cannot say.
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

I wrote this interesting script that really help me find jobs or procedures when working in a huge environment. I could I have written it as a Procedure but then I would have to have it on each machine or have a link to a server-related search that …
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.

911 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

21 Experts available now in Live!

Get 1:1 Help Now