Access 2007:我可以在查询条件中使用Format()吗?

时间:2012-12-12 20:02:12

标签: ms-access ms-access-2007 criteria

似乎我总是试图做不可能的事情。好吧,我有一个[月/日]表格设置,格式如下:

Noombers | Lemmas
-----------------
0101     | Jan 1
0102     | Jan 2
...      | ...
1230     | Dec 30
1231     | Dec 31

我有一个[出版物场地]表格,其中包含使用此[月/日]表格的字段[Reads From]和[Reads To],当我输入信息时,我只输入“Sep 1”并且点击标签,用“0901”填充字段(在后台)。这是一个文本字段,因为我想按字母数字排序,我也想进行字母数字比较。我想我可以在我创建的查询标准中做这样的事情,以显示当前正在阅读的出版物场所列表:

Field:       Reads From              | Reads To
Table:       Publication Venues      | Publication Venues
Sort:       
Show:    
Criteria:    >Format(Date(),"mmdd")  | <Format(Date(),"mmdd")

但是,虽然我没有看到任何错误,但我也没有看到应该出现的记录。事实上,我没有看到任何记录。

那么,在这一点上我可以安全地假设我不能在查询的条件中使用Format()吗?如果是这样,那么我设置此过滤器的另一种方法是什么?最好使用我已经得到它的表,因为我已经输入了数百条记录。如果我可以使用Format(),那么你认为我做错了什么?

这是SQL:

SELECT
    [Publication Venues].*
FROM
    [Publication Venues]
WHERE
    ((([Publication Venues].[Still Active?])=Yes)
  AND
    (([Publication Venues].[Reads From])<Format(Date(),"mmdd"))
  AND
    (([Publication Venues].[Reads To])>Format(Date(),"mmdd")));

2 个答案:

答案 0 :(得分:1)

您没有看到错误,因为您正在做的事情不会导致任何错误。但是,它没有按预期工作。

如果您将日期描述为4个数字Access并不会非常知道如何解释它。例如,1231转换为日期,即1903年5月15日。

要使用您正在使用的格式,您需要>Format(Date()-40043,"mmdd")<Format(Date()-40043,"mmdd")来弥补差异。

您更有可能希望将4位数转换为类似的日期:

Cdate(Left$([Reads From],2) & "/" & Right$([Reads From],2) & "/" & Year(Date()))>Date()

长话短说,如果您想将日期用作日期,则应将日期存储为日期。否则你必须跳过一些箍,以便你的前端知道你正在处理日期。

答案 1 :(得分:1)

事实证明这是解决方案,至少对于我的大脑工作方式而言:

SELECT [Publication Venues].*
FROM [Publication Venues]
WHERE
   ((([Publication Venues].[Still Active?])=Yes)
AND
   (((([Publication Venues].[Reads From]) < ([Publication Venues].[Reads To]))
   AND
   (Format(Date(), "mmdd") BETWEEN ([Publication Venues].[Reads From]) AND ([Publication Venues].[Reads To])))
OR
   ((([Publication Venues].[Reads From]) > ([Publication Venues].[Reads To]))
   AND
   (Format(Date(), "mmdd") NOT BETWEEN ([Publication Venues].[Reads From]) AND ([Publication Venues].[Reads To]))))
);

感谢您的帮助,人们。您的反馈确实让我的思维工作朝着引导我解决方案的方向发展。