我有一个名为FirstInLastOut的表单,如下图所示。
根据我想在两个日期之间搜索的姓名或徽章编号。
我在查询中使用以下条件:
>=[Forms]![FirstInLastOut]![StartDateEntry] And <=[Forms]![FirstInLastOut]![EndDateEntry]
这给了我包括其他月份在内的结果。请参阅下面的查询报告。
因此,如您在图像中看到的那样,日期的数量随着参数的增加而减少,而其他月份也有所增加。
我如何做到这一点,使其仅选择日期范围之间的日期?
SELECT FistClockInRaw.Badgenumber, FistClockInRaw.name, FistClockInRaw.lastname, FistClockInRaw.MinOfCHECKTIME, FLastClockOutRaw.MaxOfCHECKTIME, [MaxOfCHECKTIME]-[MinOfCHECKTIME] AS TotalHours, FLastClockOutRaw.QDate, FistClockInRaw.MinOfQTime, FLastClockOutRaw.MaxOfQTime, RawCompleteQuery.CHECKTIME
FROM RawCompleteQuery, FLastClockOutRaw INNER JOIN FistClockInRaw ON (FLastClockOutRaw.Badgenumber = FistClockInRaw.Badgenumber) AND (FLastClockOutRaw.name = FistClockInRaw.name) AND (FLastClockOutRaw.QDate = FistClockInRaw.QDate)
WHERE (((FistClockInRaw.name)=[Forms]![FirstInLastOut]![FirstNameEntry]) AND ((RawCompleteQuery.CHECKTIME)>=[Forms]![FirstInLastOut]![StartDateEntry] And (RawCompleteQuery.CHECKTIME)<=[Forms]![FirstInLastOut]![EndDateEntry]));
是查询
答案 0 :(得分:0)
我假设表单字段StartDateEntry
和EndDateEntry
绑定到类型date
的字段。
我还假设您只想比较那些表单字段的日期部分。
因此,请尝试使用此条件来确保正确的日期解释:
WHERE FistClockInRaw.name=[Forms]![FirstInLastOut]![FirstNameEntry]
AND RawCompleteQuery.CHECKTIME >= Format([Forms]![FirstInLastOut]![StartDateEntry], "\#yyyy-mm-dd\#")
AND RawCompleteQuery.CHECKTIME <= Format([Forms]![FirstInLastOut]![EndDateEntry], "\#yyyy-mm-dd\#")
备注:
请注意,每个日期字段/变量也总是包含时间部分!
因此,您当前将EndDateEntry
与<=
进行比较的逻辑可能会造成麻烦,因为您只会在字段00:00:00
中获得时间值为CHECKTIME
的结束日期的结果
如果CHECKTIME
的任何记录包含请求的结束日期和比00:00:00
大的时间,则不在结果中。
为避免这种情况,您应该使用<
并添加一天:
And RawCompleteQuery.CHECKTIME < Format([Forms]![FirstInLastOut]![EndDateEntry] + 1, "\#yyyy-mm-dd\#")