2016-03-15 67 views
1

結合使用我有一個Access查詢來運行每個月。查詢中使用的日期是指先前協議的結束日期。以下是從SQL爲3月1日的數據運行的提取物,它返回它在截至2月份的所有信息協議:將DateSerial與> =&<

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

這是你以後在做什麼? (Date()),Month(Date())-1,1)AND dbo_agreements_1.end_date = DateSerial – HansUp

+0

@HansUp - 將在1月份工作嗎? –

+1

當然,'DateSerial()'很聰明。當月份= 1時,減去1,給出上一年的上個月...... 12月。用這個簡單的例子檢查一下:'DateSerial(Year(#2016-1-1#),Month(#2016-1-1#) - 1,1)'返回2015年12月1日(m/d/yyyy格式)。 – HansUp

回答

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)