In case the dob column ever has an index on it, you should do something like this because its using the date dob column directly rather than a calculation based on it. Also, you won't have any ORs in the WHERE clause which will also force a tablescan. declare @DtUpper dateTime ,@DtLower dateTimeSelect @dtUpper = case @mode when 1 then getDate() when 2 then dateAdd(year, -18, getDate()) when 3 then dateAdd(year, -26, getDate()) when 4 then dateAdd(year, -30, getDate()) when 5 then dateAdd(year, -40, getDate()) when 6 then dateAdd(year, -50, getDate()) else dateAdd(year, -60, getDate()) endSelect @dtLower = case @mode when 1 then dateAdd(year, -17, getDate()) when 2 then dateAdd(year, -25, getDate()) when 3 then dateAdd(year, -29, getDate()) when 4 then dateAdd(year, -39, getDate()) when 5 then dateAdd(year, -49, getDate()) when 6 then dateAdd(year, -59, getDate()) else 0 end--Select @dtLower, @dtUpperSELECT email, dobFROM membersWhere dob between @dtLower AND @dtUpper
Be One with the OptimizerTG