2009-09-10 29 views
1

我们正在尝试进行查询,以便用户输入日期,并且查询会根据该日期提取所有记录。在查询的设计视图中,我们已经在条件中尝试了[输入日期],但它不会拉,因为它会匹配日期而不是时间。我已经看到很多使用##标记格式的日期来忽略时间,但我不知道如何将它纳入我们的查询。MS Access选择具有变量的记录

编辑:是的,我们正在使用默认为日期/时间字段的Access。

我们很不耐烦,只打算做一个范围,迫使用户输入两个日期。老实说,它需要处理两个问题,但这是Access的一个令人沮丧的问题。

+0

对不起,我的解决方案没有工作。还有一种方法可以让它只用一个用户输入。在查询数据之前,通过输入框将日期加入,并将其添加到您的SELECT指令中。你可以用记录集或查询对象来做到这一点。 – 2009-09-11 09:19:19

回答

2

因此,您在数据库中有时间戳,您想通过单一日期查询?

有两种方法可以做到这一点:

1)剥下时间部分的数据库字段

SELECT * 
    FROM Table 
WHERE DateValue([DateField]) = [Enter Date] 

,这不是很好的表现明智,但确定为小桌子

2 )您添加时间到您的输入日期和使用之间哪个更好的性能明智

SELECT * 
    FROM table 
WHERE [DateField] BETWEEN [Enter Date] AND [Enter Date] + #23:59:59# 
+0

thx - 已更新 – 2009-09-10 16:45:49

+0

谢谢,不幸的是它没有返回任何记录 – Terry 2009-09-10 17:17:15

+0

@DJ:你认为[Enter Date]的值也可能有一个不是午夜的时间元素?我认为在添加#23:59:59#之前,您应该将[输入日期]值舍入到午夜。 – onedaywhen 2009-09-11 11:23:46

2

我猜你的数据基本上是以dateTime格式输入的。在这种情况下,您应该在datevalue(myDateField)上构建查询,而不是在myDateField上构建它。您的查询,然后将看起来像(在SQL窗口)

SELECT * From MyTable WHERE dateValue(myDateField) = [enter date here] 

,而不是

SELECT * From MyTable WHERE myDateField = [enter date here] 
+0

谢谢,不幸的是它没有返回任何记录 – Terry 2009-09-10 17:16:23

2

我会调整DJ的建议有关BETWEEN,因为我认为它的工作原理我的方式从来没有完全信任d喜欢它(为第二个值增加1秒的原因是因为第二个值包含在BETWEEN范围内,这对我来说一直是违反直觉的)。

无论如何,我的建议是:

这还不是全部,不同的,但它避免了添加适量的BETWEEN第二个参数的问题。如果不使用DateAdd()DateDiff(),我总是谨防尝试日期/时间的数学运算。

定义参数也是一个好主意,因为如果用户输入无效日期,他们会得到一个有用的错误消息,而不是错误的结果。