如何在Access查询中获取日期

时间:2011-04-21 02:34:44

标签: ms-access ms-access-2003

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

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条记录,不是吗?

1 个答案:

答案 0 :(得分: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

因此,您的WHERE条件将排除20/4/2010 2:32:00 AM和20/4/2010 2:32:00 PM,因为它们大于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#