将DateSerial与> =&组合<

时间:2016-03-15 17:15:29

标签: sql ms-access

我每个月都有一个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)));

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)
相关问题