每周一次,我需要运行一个报告,在该报告中查询Access数据库,查找将在9个月或更短时间内过期的任何产品。他们想要计算的方式是将日期记录到未来9个月,并返回在该月末或更早到期的任何内容。如果它只是270天或更短,我没有问题。 (如果我能在Excel中完成,我也没有问题,但现在不能选择。)
我提出了一个解决方案,每年的每个月都有效,除非它恰好是3月(更具体地说是在3月6日到4月5日之间)。
< DateValue(Month(Date()+270)+1 & "/1/" & Year(Date()+270))
所以基本上我是&#39; m:
麻烦的是,对于上面的日期范围(我今天不幸地发现),我在12月份登陆时加上270天,所以接下来的一个月是在另一年。因此,我的报告仅生成已过期的项目。
换句话说,在3月5日,我需要一份在12月1日之前到期的所有内容的清单,但在3月6日,我需要在明年1月1日之前的所有内容。
是否有更有效的方法可以避免此问题?我想过要用
答案 0 :(得分:2)
您可能已经考虑过DateDiff,可以使用它:
Where DateDiff("m", Date(), [YourDateField]) Between 0 And 9
但是,这将忽略您在[YourDateField]上可能拥有的索引。
但是,这将包括之前在当月过期的产品。
另一种选择是DateSerial,正如Hans所示,但他忘记了在SQL中必须使用Date(),并且只列出那些将过期的产品:
Where [YourDateField] Between Date() And DateSerial(Year(Date()), Month(Date()) + 10, 0)
答案 1 :(得分:1)
使用DateSerial Function计算您需要的未来日期。
以下是Access Immediate窗口中的演示,该窗口计算从今天起9个月后的日期:
? Date
3/6/2015
? DateSerial(Year(Date), Month(Date) + 9, Day(Date))
12/6/2015
但是,据我了解您的要求,您实际上需要整个月的日期。在这种情况下,您可以计算从今天开始的10个月的第一个月,并要求比该日期少的所有内容。
? DateSerial(Year(Date), Month(Date) + 10, 1)
1/1/2016
您可以在查询中包含该表达式,例如......
WHERE expire_date < DateSerial(Year(Date()), Month(Date()) + 10, 1)