【发布时间】: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 的记录会起作用,但它会抛出上面的错误。
我的问题
- 有谁知道如何检查记录字段是否为 120 天老还是老天?
- 如果我的上述任一解决方案都适用于问题 1,那么如果我以正确的方式解决问题,我的日期字段可能有什么问题?
- @Gustov 的 DateValue() 解决方案很接近(即提供正确的值),但添加条件会导致错误。有什么解决办法吗?
我很茫然。非常感谢您对这个问题多加关注。谢谢!
【问题讨论】:
-
您的
myDtField的数据类型是文本还是日期/时间?
标签: sql date ms-access-2013