【发布时间】:2013-08-15 16:03:42
【问题描述】:
我想提取上个月20号到现在的数据,但是做BETWEEN AND命令的时候不能做函数吗?
WHERE ([dtUpdated] BETWEEN ((Year(Date()))-(Month(Date())-1)-20)
AND (Date()))
【问题讨论】:
-
你遇到了什么错误?
我想提取上个月20号到现在的数据,但是做BETWEEN AND命令的时候不能做函数吗?
WHERE ([dtUpdated] BETWEEN ((Year(Date()))-(Month(Date())-1)-20)
AND (Date()))
【问题讨论】:
您可以使用DateAdd 从今天的日期中减去一个月。这是立即窗口中的示例。
? Date()
8/15/2013
? DateAdd("m", -1, Date())
7/15/2013
然后您可以确定上一个日期的Year 和Month。
? Year(DateAdd("m", -1, Date()))
2013
? Month(DateAdd("m", -1, Date()))
7
所以最后你可以给DateSerial Year、Month 和 20 作为一天。
? DateSerial(Year(DateAdd("m", -1, Date())), _
Month(DateAdd("m", -1, Date())), 20)
7/20/2013
在查询中,像这样尝试...
WHERE [dtUpdated] BETWEEN
DateSerial(
Year(DateAdd("m", -1, Date())),
Month(DateAdd("m", -1, Date())),
20)
AND Date()
【讨论】:
DateSerial 返回一个日期/时间值,因此格式应该不是问题。我刚刚在 Access 2007 中测试了这个查询,它没有错误地工作:SELECT * FROM tblFoo WHERE [datetime_field] BETWEEN DateSerial(Year(DateAdd("m", -1, Date())), Month(DateAdd("m", -1, Date())), 20) AND Date();
DateAdd 表达式中,您必须在 m 周围使用引号。
看起来您只是试图通过将数字放入“yyyy-mm-dd”之类的日期格式来确定日期,但实际上您只是减去一堆数字(2013-3-5 = 2005)所以我猜你遇到了类型不匹配。
我认为 MS Access 有一个 DATEADD 函数,您可以在其中通过算术建立日期。
如果你想从上个月 20 日开始,它会是这样的
我想应该是这样的
DATEADD(d, 20, DATEADD(m, -1 * Month(Date()), DATEADD(d, -1 * Day(Date()), Date())))
这可以通过后续的 DATEADD 调用来完成
【讨论】: