2011-04-21 42 views
0

在Access 2000中,我们可以使用哪个函数来取回日期值?如何在Access中查询日期

 
CreateDate 
20/4/2010 2:32:00 AM 
20/4/2010 2:32:00 PM 
19/4/2010 10:14:00 AM 
17/5/2010 9:34:00 PM 

如果我查询:

SELECT * FROM tblTest WHERE CreateDate <= #20/4/2010# 

我只看到19/4/2010记录。

其实,结果应该显示前3条记录,不是吗?

回答

2

您的文字日期值#20/4/2010#实际上是一个日期/时间值,代表4月20日午夜。请参阅立即窗口中的示例,该窗口使用Format()函数显示完整日期/时间值由该文字表示。

? Format(#20/4/2010#, "d/m/yyyy hh:nn:ss AMPM") 
20/4/2010 12:00:00 AM 

因此,无论20/4/2010上午02时32分00秒和20/4/2010下午2时32分00秒是由你的WHERE条件排除,因为他们都大于20/4/2010 12: 00:00 AM。

如果您在Access会话中运行查询,则可以使用DateValue()函数将您的CreateDate值转换为同一日期的午夜。此查询应返回您所期望的内容:

SELECT * FROM tblTest WHERE DateValue(CreateDate) <= #20/4/2010# 

另一种方法是将一天后的午夜用作截止值。

SELECT * FROM tblTest WHERE CreateDate < #21/4/2010# 

第二查询可以显著更快地执行,因为它不会需要应用则DateValue()函数在TBLTEST每CREATEDATE值。如果CreateDate被索引,第二个查询仍然会更快。第一个查询将无法利用CreateDate上的索引。

此外,我更喜欢使用的文字值的明确的日期格式,所以会写这样的查询:

SELECT * FROM tblTest WHERE CreateDate < #2010/4/21# 
+0

谢谢你,HansUp。我清楚了。 – soclose 2011-04-21 07:17:09