简体   繁体   中英

sql query case dateadd

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM