我每个月都有一个Access查询。查询中使用的日期是指先前协议的结束日期。以下是针对3月1日运行的数据的SQL摘录,它返回了2月份结束的协议的所有信息:
AND ((dbo_agreements_1.end_date)>=#2/1/2016#) AND ((dbo_agreements_1.end_date)<#3/1/2016#));
因此,对于将于4月1日运行的数据(显示3月结束的协议),我必须更改日期说:
AND ((dbo_agreements_1.end_date)>=#3/1/2016#) AND ((dbo_agreements_1.end_date)<#4/1/2016#));
有没有办法在这里使用DateSerial
,以便使查询动态化(从某种意义上说,我不必每月手动更改日期)?我认为下面的内容可能有用,但它在数据类型中返回不匹配:
) AND ((dbo_agreements_1.end_date)>=DateSerial(Year([dbo_agreements_1]![end_date]),Month([dbo_agreements_1]![end_date])-1,1)) AND ((dbo_agreements_1.end_date)<DateSerial(Year([dbo_agreements_1]![end_date]),Month([dbo_agreements_1]![end_date]),1)));
答案 0 :(得分:1)
DateSerial(Year(Date()), Month(Date()), 1)
将为您提供当月的第一天。
DateSerial(Year(Date()), Month(Date()) - 1, 1)
将为您提供上个月的第一天。
因此,在您的查询WHERE
子句中包含这样的组合条件:
dbo_agreements_1.end_date >= DateSerial(Year(Date()), Month(Date()) -1, 1)
AND dbo_agreements_1.end_date < DateSerial(Year(Date()), Month(Date()), 1)