Поскольку это, вероятно, связано с отчетностью, вы можете использовать метод временных таблиц, что не так уж и плохо, особенно если вы запускаете несколько отчетов за определенный период (но позаботьтесь о нескольких пользователях).
Теперь, просто для удовольствия, вот очень уродливый, но полугибкий подход (использует таблицу с 10 записями и работает в диапазоне 273 лет)
Создайте таблицу с именем t10 с одним полем - id (сделайте ее длинным и первичным ключом) и введите десять строк: 0,1,2,3..9
После этого
SELECT #1/1/2010#+
[t10].[ID]+
[t100].[iD]*10+
[t1000].[ID]*100+
[t10000].[ID]*1000+
[t100000].[iD]*10000 AS Mondays,
FROM t10,
t10 AS t100,
t10 AS t1000,
t10 AS t10000,
t10 AS t100000
WHERE Weekday(#1/1/2010#+
[t10].[ID]+
[t100].[iD]*10+
[t1000].[ID]*100+
[t10000].[ID]*1000+
[t100000].[iD]*10000)=2;
возвращает все понедельники с 2010-1-1 по 2283-10-15 и не так медленно, как уродливо.
Конечно, чтобы получить решение для вашего вопроса, вам нужно отфильтровать результаты для ваших полей date1 и date2.
По сути, это то же решение, что и временная таблица, с основным отличием в том, что вам не нужно перестраивать таблицу при каждом запросе.
Вы могли бы достичь того же результата только с одной таблицей с записями 0..99999, и если бы я использовал временные таблицы, я бы, вероятно, использовал что-то подобное.