【问题标题】:Access 2013: How to Return All Records With Date Older than X?Access 2013:如何返回日期早于 X 的所有记录?
【发布时间】:2016-05-11 19:06:02
【问题描述】:

我的问题

我在相关表格中有一个日期字段。我正在尝试创建一个查询,该查询仅显示该日期字段为 120 天或更早的记录。

我的代码

解决方案尝试 1

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

< Date()-120

这删除了一些“随机”记录,留下了原来 905 条记录中的 714 条。不幸的是,按升序快速浏览剩余记录的日期,很明显,我仍在获得 120 天前的记录。

根据我上面的“随机”结果,我通过将字段更改为:

DATE: Format([myDtField], "mm/dd/yyyy")

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

解决方案尝试 2

基于我上面的问题,我决定走一条不同的路。这次我为我的标准计算创建了一个独特的字段。对于我使用的字段值:

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

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

解决方案尝试 3

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

解决方案尝试 4 @Gustov 让我想起了 DateValue() 函数。我也在该字段上尝试过 - 该字段作为文本字段导入,因此需要转换为日期值。类似于 Gustov 发布的公式,对于我使用的字段值:

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

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

>120

这会导致以下错误:

条件表达式中的数据类型不匹配

这可能是我拥有的最接近的解决方案,仅仅是因为没有标准它返回正确的值(即昨天的日期返回“1”,而两天前的日期返回“2”......等等)。所以你会认为简单地限制该字段大于 120 的记录会起作用,但它会抛出上面的错误。

我的问题

  1. 有谁知道如何检查记录字段是否为 120 天老还是老天?
  2. 如果我的上述任一解决方案都适用于问题 1,那么如果我以正确的方式解决问题,我的日期字段可能有什么问题?
  3. @Gustov 的 DateValue() 解决方案很接近(即提供正确的值),但添加条件会导致错误。有什么解决办法吗?

我很茫然。非常感谢您对这个问题多加关注。谢谢!

【问题讨论】:

  • 您的myDtField 的数据类型是文本还是日期/时间?

标签: sql date ms-access-2013


【解决方案1】:

汉斯摸了摸东西。如果日期不是日期而是文本,试试这个:

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

【讨论】:

  • 我向 Gustav 道歉,我没有在我的问题中提到我也尝试过 DateValue() 函数(我会更新问题以反映这一点)。我觉得某种类型的转换是必要的(DateValue() 或 Format(),因为该字段是作为文本字段导入的)。 -- 使用 DateValue 时(即您上面的确切陈述)Data type mismatch in criteria expression 的访问错误。所以我不确定接下来会采取什么措施。
  • 那么你可能有一些 Null 值或不可读的日期。请参阅编辑以将其过滤掉。
  • 成功了!我必须对“设计视图”稍作修改,我必须使用&gt;120 的条件将其设为DATEDIFF: IIf(IsDate([myDtField]),DateDiff("d",DateValue([myDtField]),Date()),0)——我习惯于在 SQL 视图中为 Access Queries 工作,但这是一个包含 62 个字段的附加查询,所以它在 SQL 视图中有点忙 ;-)
  • 太棒了!感谢您的反馈。
【解决方案2】:

我已经尝试过了,它有效,DATAText 是存储为文本的数据。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多