Instead of creating views, why not make an inline table-valued function - effectively a parameterized view. You basically get all the benefits of views AND parameters. Another thing you can do in your TVF is something like this: SELECT yourtable.* FROM yourtable INNER JOIN ranges ON yourtable.date BETWEEN ranges.start AND ranges.end WHERE ranges.name = @range_name Now your ranges have names (in a table where they can be easily managed without changing the schema) - this also fairly seamlessly handles multiple ranges with the same name, although if ranges overlap you can have duplicates due to the join matching both. Also, please consider avoiding BETWEEN: http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx I strongly suggest that you reconsider your requirements and when asking questions here be sure to include more about your motivations, because when you bring in a question with a preconceived notion of what the solution is, you are likely to get a suboptimal solution. (like the dynamic SQL solutions given aren't going to easily work for your OR case, but that information about the problem space is buried in a comment from you) From: http://sqlfiddle.com/#!6/425db/1 CREATE TABLE LogData ( Id INT IDENTITY NOT NULL ,Dt DATETIME NOT NULL ,Data VARCHAR(max) NOT NULL ); CREATE TABLE Ranges ( Id INT IDENTITY NOT NULL ,Name VARCHAR(50) NOT NULL ,DtStart DATETIME NOT NULL ,DtEnd DATETIME NOT NULL ); CREATE TABLE Groups ( Id INT IDENTITY NOT NULL ,Name VARCHAR(50) NOT NULL ); CREATE TABLE RangeGroups ( RangeId INT NOT NULL ,GroupId INT NOT NULL ); INSERT INTO LogData (Dt, Data) VALUES ('2011-11-23 11:00', 'before thanksgiving day') ,('2011-11-24 11:00', 'on thanksgiving day') ,('2011-12-24 11:00', 'on christmas eve') ,('2011-12-25 11:00', 'on christmas day') ,('2012-11-21 11:00', 'before thanksgiving day') ,('2012-11-22 11:00', 'on thanksgiving day') ,('2012-12-24 11:00', 'on christmas eve') ,('2012-12-25 11:00', 'on christmas day'); INSERT INTO Ranges (Name, DtStart, DtEnd) VALUES ('THANKSGIVING2011', '2011-11-24', '2011-11-25') ,('CHRISTMASEVE2011', '2011-12-24', '2011-12-25') ,('CHRISTMASDAY2011', '2011-12-25', '2011-12-26') ,('BOXINGDAY2011', '2011-12-26', '2011-12-27') ,('NEWYEARSEVE2011', '2011-12-31', '2012-01-01') ,('NEWYEARSDAY2012', '2012-01-01', '2012-01-02') ,('THANKSGIVING2012', '2012-11-22', '2012-11-23') ,('CHRISTMASEVE2012', '2012-12-24', '2012-12-25') ,('CHRISTMASDAY2012', '2012-12-25', '2012-12-26') ,('BOXINGDAY2012', '2012-12-26', '2012-12-27') ,('NEWYEARSEVE2012', '2012-12-31', '2013-01-01') ,('NEWYEARSDAY2013', '2013-01-01', '2013-01-02'); INSERT INTO Groups (Name) VALUES ('HOLIDAYS2011') ,('HOLIDAYS2012') ,('ANYCHRISTMAS'); INSERT INTO RangeGroups (RangeId, GroupId) SELECT Id, (SELECT Id FROM Groups WHERE Name = 'HOLIDAYS2011') FROM Ranges WHERE Name LIKE '%2011'; INSERT INTO RangeGroups (RangeId, GroupId) SELECT Id, (SELECT Id FROM Groups WHERE Name = 'HOLIDAYS2012') FROM Ranges WHERE Name LIKE '%2012'; INSERT INTO RangeGroups (RangeId, GroupId) SELECT Id, (SELECT Id FROM Groups WHERE Name = 'ANYCHRISTMAS') FROM Ranges WHERE Name LIKE 'CHRISTMAS%'; SELECT * FROM LogData INNER JOIN Ranges ON LogData.Dt >= Ranges.DtStart AND LogData.Dt < Ranges.DtEnd INNER JOIN RangeGroups ON RangeGroups.RangeId = Ranges.Id INNER JOIN Groups ON Groups.Id = RangeGroups.GroupId AND Groups.Name = 'HOLIDAYS2011'; SELECT * FROM LogData INNER JOIN Ranges ON LogData.Dt >= Ranges.DtStart AND LogData.Dt < Ranges.DtEnd INNER JOIN RangeGroups ON RangeGroups.RangeId = Ranges.Id INNER JOIN Groups ON Groups.Id = RangeGroups.GroupId AND Groups.Name = 'HOLIDAYS2012'; SELECT * FROM LogData INNER JOIN Ranges ON LogData.Dt >= Ranges.DtStart AND LogData.Dt < Ranges.DtEnd INNER JOIN RangeGroups ON RangeGroups.RangeId = Ranges.Id INNER JOIN Groups ON Groups.Id = RangeGroups.GroupId AND Groups.Name = 'ANYCHRISTMAS';