我想过滤今天和最后一天之间的日期和时间。我将使用它来查看两个用户之间的切断。
这是我得到的代码,我无法修复时间。我希望它是从昨晚6点到今天上午9点。
WHERE (((tbldtr.Date)=Date()-1)
AND (("time")>=#12/30/1899 18:0:0#))
OR (((tbldtr.Date)=Date())
AND (("time")<=#12/30/1899 9:0:0#))
ORDER BY tbldtr.Date;
答案 0 :(得分:0)
这假设您的Date
列是日期时间列,并且您没有单独存储时间。
WHERE tbldtr.Date >= dateadd("h", 18, dateadd("d", datediff("d", 0, now())-1, 0))
and tbldtr.Date < dateadd("h", 9, dateadd("d", datediff("d", 0, now()), 0))
或者
WHERE tbldtr.Date >= dateserial(year(now),month(now),day(now)-1) + 18/24
AND tbldtr.Date < dateserial(year(now),month(now),day(now)) + 9/24
使用您认为更容易阅读的内容。
编辑:
我在即时窗口中进行了这样的测试
?#7/29/2014 7:00 PM# >= dateserial(year(now),month(now),day(now)-1) + 18/24 AND #7/29/2014 7:00 PM# < dateserial(year(now),month(now),day(now)) + 9/24
True
?#7/29/2014 5:00 PM# >= dateserial(year(now),month(now),day(now)-1) + 18/24 AND #7/29/2014 5:00 PM# < dateserial(year(now),month(now),day(now)) + 9/24
False
?#7/30/2014 7:00 PM# >= dateserial(year(now),month(now),day(now)-1) + 18/24 AND #7/30/2014 7:00 PM# < dateserial(year(now),month(now),day(now)) + 9/24
False
?#7/30/2014 5:00 AM# >= dateserial(year(now),month(now),day(now)-1) + 18/24 AND #7/30/2014 5:00 AM# < dateserial(year(now),month(now),day(now)) + 9/24
True
如果您的日期和时间列是分开的,您可以将它们添加到一起以生成单个日期时间值(并且因为在Access SQL中没有Date
或Time
这样的数据类型我假设您有办法保持日期超出时间和时间。这不是最好的设计,但你必须有理由走这条路)
WHERE (tbldtr.Date + tbldtr.Time) >= dateadd("h", 18, dateadd("d", datediff("d", 0, now())-1, 0))
and (tbldtr.Date + tbldtr.Time) < dateadd("h", 9, dateadd("d", datediff("d", 0, now()), 0))
或者
WHERE (tbldtr.Date + tbldtr.Time) >= dateserial(year(now),month(now),day(now)-1) + 18/24
AND (tbldtr.Date + tbldtr.Time) < dateserial(year(now),month(now),day(now)) + 9/24
如果你想做一个完整性检查,你可以从你的时间中清除日期以防万一。
?tbldtr.Time - dateadd("d", datediff("d", 0, tbldtr.Time, 0),0)
以及日期之外的时间
?dateadd("d", datediff("d", 0, tbldtr.Date, 0),0))