0

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

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

我有一个 [Publication Venues] 表,其中包含 [Reads From] 和 [Reads To] 字段,它们利用这个 [month/day] 表,当我输入信息时,我只需输入“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")));
4

2 回答 2

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()

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

于 2012-12-12T20:33:52.047 回答
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]))))
);

我感谢你的帮助,人们。您的反馈确实使我的思想朝着引导我找到解决方案的方向前进。

于 2012-12-12T21:51:54.877 回答