2015-08-20 83 views
0

我需要指定访问条件的日期字段上的帮助,该日期字段将从我的数据库中提取记录,从去年开始,1/1/2014的日期与当天和当天的同一日期相同。这个信息的原因是能够比较今年的今年迄今的记录(以及后来的记录)与去年的今年迄今的记录......因此,如果今天的日期是8/20/2015年,我希望能够从2015年1月1日至2015年8月20日,然后将其与2014年1月1日至2014年8月20日的比较。 仅供参考,我使用相同的查询和表单根据每周,每季度的日期范围对记录进行计数,因此我无法在“开始”和“结束”日期中使用文本框。另外,我无法在我的查询中预先指定任何日期。任何想法将不胜感激。谢谢你们。访问查询,返回前一年的记录,截至当天,与当天相同但前一年的记录

回答

2

去年的今年迄今为止DateSerial将做你想做的。

Where [DateColumn] >= DateSerial(year(now)-1,1,1) 
     and [DateColumn] <= DateSerial(year(now)-1,month(now),day(now)) 

另一种选择

Where [DateColumn] >= dateadd("yyyy", datediff("yyyy", 0, now)-2, 2) 
     and [DateColumn <= DateAdd("yyyy",-1, now) 
+0

'Now'不会在SQL工作。 – Gustav

+0

@Gustav,你现在在什么环境下'Now'不工作? 'Date'现在都在'DateTime'模块中。我希望如果一个人工作,另一个人也会工作。 – Brad

+2

谢谢@Brad。两种方法都适用于我。谢谢 – b2amen

-1

下面的表达式可以在查询设计器可以用作标准的日期字段

>="01/01/" & (Year(Date())-1) AND <=Day(Date()) & "/" & Month(Date()) & "/" & Year(Date())-1 

警告:使用字符串来构建日期应尽可能避免。 DateSerial()是一种更好的方法,但是这可以在MS Access(Jet/ACE)中使用。

+2

您不应该在日期中使用字符串处理 - 而dd/mm/yyyy将在SQL中失败。 – Gustav

+0

同意;使用字符串来建立日期不是最佳实践,应尽可能避免使用字符串DateSerial()。 OP表示“任何想法都将不胜感激”。并且这个答案确实提供了期望的结果... –

+0

我可以工作,但是对于1到12之间的日期值将会失败,因为SQL将以mm/dd/yyyy读取dd/mm/yyyy字符串。始终使用yyyy-mm-dd格式。 – Gustav

2

您需要在SQL中使用日期():

Where [DateColumn] >= DateSerial(Year(Date())-1,1,1) 
     And [DateColumn] <= DateAdd("yyyy",-1,Date()) 
+0

谢谢@Gustav。你的方法也适用于我。谢谢 – b2amen

相关问题