• Case expressions are short-circuit evaluated. The first expression that meets the criteria will be used.

    This one assumes that birth dates in the future and NULL birth dates should return a NULL age. Your business requirements may vary in regard to missing or invalid data.

    CREATE TABLE test (dob DATE);

    -- add more values here for a complete test

    INSERT TEST VALUES

    ('2002-09-28'),

    ('2002-09-30'),

    ('2002-09-29'),

    ('2000-01-01'),

    ('1995-01-01'),

    ('1990-01-01'),

    (NULL),

    -- date in the future

    ('2020-01-01');;

    SELECT dob,

    CASE

    WHEN dob <= DATEADD(YEAR, -66, GETDATE()) THEN 'Age 66+'

    WHEN dob <= DATEADD(YEAR, -56, GETDATE()) THEN 'Age 56 to 65'

    WHEN dob <= DATEADD(YEAR, -46, GETDATE()) THEN 'Age 46 to 55'

    WHEN dob <= DATEADD(YEAR, -36, GETDATE()) THEN 'Age 36 to 45'

    WHEN dob <= DATEADD(YEAR, -26, GETDATE()) THEN 'Age 26 to 35'

    WHEN dob <= DATEADD(YEAR, -21, GETDATE()) THEN 'Age 21 to 25'

    WHEN dob <= DATEADD(YEAR, -19, GETDATE()) THEN 'Age 19 to 20'

    WHEN dob <= DATEADD(YEAR, -18, GETDATE()) THEN 'Age 18'

    WHEN dob <= DATEADD(YEAR, -16, GETDATE()) THEN 'Age 16 to 17'

    WHEN dob <= DATEADD(YEAR, -14, GETDATE()) THEN 'Age 14 to 15'

    WHEN dob <= GETDATE() THEN 'Age less than 14'

    END AS Age

    from test

    order by dob;