Reputation: 3
Can I use GetDate and DateAdd in a SQL Query Select Case statement? Part of my query is as follows but it only returns OVER60 as the result regardless of client's Date of Birth. Is there a better way to accomplish this? I'm a novice at this and it's my first question to Stack Overflow so I thank you for any insight.
SELECT G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob
, CASE
WHEN (G.ClientDob > GETDATE() AND G.ClientDob < dateadd(year, -13, GetDate()))THEN 'Under13'
WHEN (G.ClientDob >= DATEADD(YEAR, -13, GETDATE()) AND G.ClientDob < DATEADD(year, -20, GETDATE()))THEN '13-19'
WHEN (G.ClientDob >= DATEADD(Year, -20, GETDATE()) AND G.ClientDob < DATEADD(Year, -30, GETDATE())) THEN '20-29'
WHEN (G.ClientDob >= DATEADD(YEAR, -30, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -45, GETDATE())) THEN '30-44'
WHEN (G.ClientDob >= DATEADD(Year, -45, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -60, GETDATE())) THEN '45-59'
Else 'OVER60'
END AS AgeCategory
Upvotes: 0
Views: 777
Reputation: 34784
Assuming SQL Server despite MySQL
tag
This should do it:
SELECT G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob
, CASE
WHEN (G.ClientDob > dateadd(year, -13, GetDate()))THEN 'Under13'
WHEN (G.ClientDob > DATEADD(year, -20, GETDATE()))THEN '13-19'
WHEN (G.ClientDob > DATEADD(Year, -30, GETDATE())) THEN '20-29'
WHEN (G.ClientDob > DATEADD(YEAR, -45, GETDATE())) THEN '30-44'
WHEN (G.ClientDob > DATEADD(YEAR, -60, GETDATE())) THEN '45-59'
Else 'OVER60'
END AS AgeCategory
You had <
and >
confusion, also there's no need for negating prior criteria in subsequent WHEN
criteria, the first matching criteria gets used and none others are evaluated.
Note: As xQbert noted, the above assumes no future birthdates exist, if future birthdays can exist in your data (they shouldn't be allowed imo), you would want to handle those explicitly.
Upvotes: 1