Во-первых, вы (и большинство ответов в этой теме) путаете варианты SQL. Вы ничего не сказали в своем вопросе о SQL Server, но получаете рекомендации по использованию синтаксиса SQL Server (т. Е. GetDate ()).
Ответ от JohnFx предоставляет вам правильный синтаксис Jet SQL:
SELECT *
FROM results
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())
Но он также прав, если назвать поле «Дата» действительно неправильно в Access / Jet. Предложение WHERE может быть улучшено с помощью:
WHERE (results.Date between DateAdd("d", -30, Date()) and Date())
но я не могу сказать наверняка - я бы никогда не назвал поле "Дата", поэтому никогда бы не столкнулся с такой проблемой.
Но может быть и более простая версия, учитывая, что Jet хранит свои даты в формате, где целая часть указывает дату, а десятичная часть - время. Из-за этого при работе с датами (в отличие от недель, месяцев или кварталов) вы можете напрямую выполнять математику с датами:
WHERE results.Date BETWEEN results.Date-30 AND Date()
Это даст вам те же результаты, что и в версии DateFiff () JohnFx, но для каждой строки не нужно будет вызывать функцию DateAdd.
Ключевым моментом является использование правильного синтаксиса для базы данных Jet, и это означает, что первым аргументом для DateAdd () является строковое значение ("d") и что вы не можете использовать функцию SQL Server (GetDate ( )), но вместо этого должен использовать функцию Jet для той же цели (Date ()). Но также стоит избегать использования функций Jet / Access в вашем SQL, когда это не нужно, и поэтому я считаю, что версия «results.Date-30» будет лучше, чем версия DateAdd (). .
В сторону: я действительно хотел бы, чтобы те, кто публикует ответы с использованием SQL, обращали пристальное внимание на то, какой механизм базы данных использует тот, кто задает вопросы, для выполнения SQL. В этой ветке найдено много неправильных ответов именно потому, что эти постеры не читали вопрос внимательно (из ключевых слов было довольно ясно, какой механизм базы данных был задействован).