Microsoft Access SQL查询不带年份的日期范围

Microsoft Access SQL查询不带年份的日期范围,sql,ms-access,Sql,Ms Access,我的问题类似于,但有点不同 我有以下疑问: SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE, Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS, Cats_History.LOSSCURRENT FROM Cats_History WHERE (Month(Cats_History.BEGDATE)*100)+Day(Cats_Hist

我的问题类似于,但有点不同

我有以下疑问:

SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE, Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS, Cats_History.LOSSCURRENT
FROM Cats_History
WHERE (Month(Cats_History.BEGDATE)*100)+Day(Cats_History.BEGDATE) Between 101 And 131;
在SQL中指定月/日时,这可以正常工作。但是,如果我将101和131替换为[start]和[end],以便用户可以在单击我的表单按钮后输入值,则会得到错误的结果

例如,如果我使用表单输入101和108,则会显示正确的一月日期,但也会显示十月日期

SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE, Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS, Cats_History.LOSSCURRENT
FROM Cats_History
WHERE (Month(Cats_History.BEGDATE)*100)+Day(Cats_History.BEGDATE) Between [start] And [end];

如果我尝试一月以外的任何日期,它似乎也可以正常工作。

应该简单到:

SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE
  , Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS
  , Cats_History.LOSSCURRENT
FROM Cats_History
WHERE Month(Cats_History.BEGDATE) = 1
  AND Day(Cats_History.BEGDATE) BETWEEN ([start] % 100) AND ([end] % 100);
我不知道你为什么会在十月份约会。听起来您用来生成
[start]
[end]
的数学可能有错误

我建议只使用日期值,并将查询简化为:

SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE
  , Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS
  , Cats_History.LOSSCURRENT
FROM Cats_History
WHERE Cats_History.BEGDATE BETWEEN [start] AND [end];

我正在使用MS Access。@Andrew-这其中的哪一部分在Access中失败?我编辑了我的问题以包含失败的SQL。当系统提示我输入1月份的日期范围时,结果也会显示10月份(第10个月)的日期。如果我使用第二个SQL代码,它不会忽略年份。对的我在使用第一个代码段时遇到语法错误。它突出显示错误上的%符号。我没有使用任何数学来生成[开始]和[结束]。这只是用户输入月份和日期的提示。例如101(1月1日)。和108年底(1月8日)。我不确定仅使用一月值时为什么会出错。另外,当我尝试101到131时,它会检索10月、11月和12月的值。我猜可能存在某种值类型的情况,比如文本与整数。@Andrew-是的,年份不会被忽略。您是否希望只匹配月份和日期而不考虑年份?如果怀疑存在类型问题,可以使用
CInt([start])
CInt([end])
强制转换为整数值。
SELECT Cats_History.ID, Cats_History.TYPE, Cats_History.BEGDATE, Cats_History.ENDDATE, Cats_History.DESCRIPTION, Cats_History.LOSS, Cats_History.LOSSCURRENT
FROM Cats_History
WHERE (Month(Cats_History.BEGDATE)*100)+Day(Cats_History.BEGDATE) Between CInt([start]) and CInt([end]);