Probably not exactly what you are looking for, but you get the results you want:DECLARE @Yak TABLE (Date DATETIME)INSERT @YakSELECT GETDATE()UNION ALL SELECT GETDATE() + 1UNION ALL SELECT GETDATE() + 3UNION ALL SELECT GETDATE() + 12UNION ALL SELECT GETDATE() + 47UNION ALL SELECT GETDATE() + 93DECLARE @DatePart VARCHAR(10)DECLARE @Number INTSET @DatePart = 'WEEK'SET @Number = 10SELECT *FROM @YakWHERE Date BETWEEN GETDATE() AND CASE WHEN @DatePart = 'SECOND' THEN DATEADD(SECOND, @Number, GETDATE()) WHEN @DatePart = 'MINUTE' THEN DATEADD(MINUTE, @Number, GETDATE()) WHEN @DatePart = 'HOUR' THEN DATEADD(HOUR, @Number, GETDATE()) WHEN @DatePart = 'DAY' THEN DATEADD(DAY, @Number, GETDATE()) WHEN @DatePart = 'WEEK' THEN DATEADD(WEEK, @Number, GETDATE()) WHEN @DatePart = 'MONTH' THEN DATEADD(MONTH, @Number, GETDATE()) WHEN @DatePart = 'YEAR' THEN DATEADD(YEAR, @Number, GETDATE()) ELSE DATEADD(DAY, @Number, GETDATE()) END
Or you could create a function that you could use instead of the case statement, if you need the same logic in multiple places.