Access 2013:如何返回日期早于X的所有记录?

时间:2016-05-11 19:06:02

标签: sql date ms-access-2013

我的问题

我在相关表格中有一个日期字段。我试图创建一个只显示该日期字段为120天或更旧的记录的查询。

我的代码

解决方案尝试1

我尝试的第一个解决方案只是在我的日期字段中添加了标准。我使用的标准公式是:

< Date()-120

这删除了一些随机的&#39;记录留给我原始905条记录中的714条。不幸的是,快速查看剩余记录的日期是按升序排列的,很明显我仍然记录了120天以前的记录。

基于我的&#39;随机&#39;上面的结果,我通过将字段更改为:

来仔细检查我的字段的格式
DATE: Format([myDtField], "mm/dd/yyyy")

我再次运行查询 - 这减少了删除的记录数量,留下了734的905 - 但我的问题仍然存在 - 我仍然记录日期超过120岁。

解决方案尝试2

根据我的上述问题,我决定走另一条路。这次我为我的标准计算创建了一个唯一的字段。对于我使用的字段值:

DateDiff: DateDiff("d",[myDtField],Date())

这导致了与正确值相差很远的值(例如,日期为昨天的记录导致43!)。

解决方案尝试3

这不是一个解决方案,更多的只是故障排除,但根据我得到的结果,我一直认为我的日期不被系统视为它显示的日期(即,与显示的值相比,DateValue()处于关闭状态)。我发现检查了几个日期与他们的DateValue(),随机选择的记录似乎都是正确的。再说一遍,没有运气。

解决方案尝试4 @Gustov提醒我关于DateValue()函数。我也尝试过这个字段 - 字段作为文本字段导入,因此需要转换为日期值。与Gustov发布的公式类似,对于我使用的字段值:

DATEDIFF: DateDiff("d",Nz(DateValue([LASTPAYDT]),0),Date())

然后在标准中我只使用了公式:

>120

这会导致以下错误:

  

标准表达式中的数据类型不匹配

这可能是我最接近的解决方案,因为没有标准它会返回正确的值(即昨天返回的日期&#34; 1&#34;,而两天前的日期返回&#34; 2& #34; ......等)。所以你会认为只是限制这个字段> 120的记录就可以了,但是它会引发上面的错误。

我的问题

  1. 有没有人知道如何检查记录字段是否为120 天还是老?
  2. 如果我上面的任何一个解决方案适用于问题1,那么如果我以正确的方式解决问题,那么我的日期字段可能会出现什么问题?
  3. @ Gustov的DateValue()解决方案已关闭(即提供正确的值),但添加条件会导致错误。任何解决方案?
  4. 我不知所措。关于这个问题的另一组眼睛将非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

汉斯触动了一些东西。如果日期不是日期而是文本,请尝试:

Select * From YourTable
Where 
    IsDate([myDtField])
    And
    DateDiff("d", DateValue([myDtField]), Date()) > 120

答案 1 :(得分:0)

我试过这个并且它有效,DATAText是存储为文本的数据。

SELECT Tabella1.ID, Tabella1.DATAText, Date() AS Espr1
FROM Tabella1
WHERE (cDate(Format(Tabella1.DataText,"yyyy-MM-dd hh:mm:ss")))<Date()-120;