我有一个带有日期/时间字段的发票表。我想编写一个返回特定日期所有发票的查询。
我遇到的问题是,当我按特定日期(例如04/30/2011)过滤查询时,没有返回任何记录。我怀疑Access正在尝试返回与2011年4月30日完全匹配的记录。
我想要的是一个查询,它返回2011年4月30日发生的所有发票,无论它们发生在什么时间。基本上,我希望Access能够关心当天,而不是时间。
有没有关于如何做到这一点的文件?我肯定找不到任何东西。我正在使用Access 2010.谢谢!
答案 0 :(得分:3)
没有看到你的尝试,很难说你做错了什么。我想你正试图检查是否平等,这基本上意味着它必须恰好发生在午夜。
SELECT * FROM table WHERE date >= #04/30/2011# AND date < #05/01/2011#
答案 1 :(得分:2)
关于数据类型,我假设您的日期存储在datetime
字段中。这也将存储时间,如果没有指定时间,则默认为午夜。我通常使用BETWEEN
函数来执行此操作:
SELECT *
FROM table
WHERE datefield BETWEEN '2011-04-30' AND '2011-05-01'
由于这两个日期都是午夜,因此您将从4月30日开始收到结果。
答案 2 :(得分:2)
您对Access正在做的事情是正确的;当您提供没有时间的日期时间值时,它假定为午夜。所以“2011-04-30”的意思是“2011-04-30 00:00:00”。
Access中有一个Datediff函数,如下所示:
Datediff("d", "2011-04-30", [FieldName]) = 0
答案 3 :(得分:0)
您可以尝试以下方式:
DateAdd("d", DateDiff("d", 0, MyDate), 0 )
另一种选择:
CDate(Format(MyDate,"yyyy-mm-dd"))
其他人提到的另一种解决方案,允许您插入一个日期:
DateCol >= #2011-04-30# And DateCol <= DateAdd("d",1,#2011-04-30#)