Access 2013:如何 Return 所有日期早于 X 的记录?
Access 2013: How to Return All Records With Date Older than X?
我的问题
我在相关 table 中有一个日期字段。我正在尝试创建一个查询,该查询将仅显示该日期字段为 120 天或更早的记录。
我的代码
解决方案尝试 1
我尝试的第一个解决方案是简单地将标准添加到我的日期字段。我使用的标准公式是:
< Date()-120
这删除了一些 'random' 条记录,留下我原来的 905 条记录中的 714 条。不幸的是,按升序快速浏览剩余记录的日期,很明显我仍在获取 120 天前的最近记录。
根据上面的 'random' 结果,我通过将字段更改为:
仔细检查了字段的格式
DATE: Format([myDtField], "mm/dd/yyyy")
我再次 运行 查询 - 这减少了删除的记录数量,留下 905 条中的 734 条 - 但我的问题仍然存在 - 我仍然有日期比 120 更早的记录。
解决方案尝试 2
基于我的上述问题,我决定走另一条路。这次我为我的条件计算创建了一个唯一字段。对于我使用的字段值:
DateDiff: DateDiff("d",[myDtField],Date())
这导致值与正确值相差甚远(例如,昨天日期的记录结果为 43!)。
解决方案尝试 3
这不是一个解决方案,更多的只是故障排除,但根据我得到的结果,我一直认为我的日期没有被系统视为它显示的日期(即 DateValue() 是与显示值相比关闭)。我抽查了一些日期与他们的 DateValue() 和 运行domly 选择的记录似乎都是正确的。再次,运气不好。
解决方案尝试 4
@Gustov 让我想起了 DateValue() 函数。我也在该字段上尝试过 - 该字段作为文本字段导入,因此需要转换为日期值。类似于 Gustov 发布的公式,对于我使用的字段值:
DATEDIFF: DateDiff("d",Nz(DateValue([LASTPAYDT]),0),Date())
然后在标准中我简单地使用了公式:
>120
这会导致以下错误:
Data type mismatch in criteria expression
这可能是我拥有的最接近的解决方案,只是因为没有标准它 returns 正确的值(即昨天的日期返回“1”,而两天前的日期返回“2”。 .. ETC)。所以你会认为简单地限制该字段大于 120 的记录是可行的,但它会抛出上面的错误。
我的问题
- 有没有人知道如何检查记录字段是否为 120
天大还是更老?
- 如果我的上述任一解决方案都适用于问题 1,那么如果我以正确的方式处理它,我的日期字段可能有什么问题导致问题?
- @Gustov 的 DateValue() 解决方案很接近(即提供正确的值),但添加条件会导致错误。有什么解决办法吗?
我很茫然。将不胜感激对这个问题的额外关注。谢谢!
汉斯摸了摸东西。如果日期不是日期而是文本,试试这个:
Select * From YourTable
Where
IsDate([myDtField])
And
DateDiff("d", DateValue([myDtField]), Date()) > 120
我已经试过了并且有效,DATAText 是作为文本存储的数据。
SELECT Tabella1.ID, Tabella1.DATAText, Date() AS Espr1
FROM Tabella1
WHERE (cDate(Format(Tabella1.DataText,"yyyy-MM-dd hh:mm:ss")))<Date()-120;
我的问题
我在相关 table 中有一个日期字段。我正在尝试创建一个查询,该查询将仅显示该日期字段为 120 天或更早的记录。
我的代码
解决方案尝试 1
我尝试的第一个解决方案是简单地将标准添加到我的日期字段。我使用的标准公式是:
< Date()-120
这删除了一些 'random' 条记录,留下我原来的 905 条记录中的 714 条。不幸的是,按升序快速浏览剩余记录的日期,很明显我仍在获取 120 天前的最近记录。
根据上面的 'random' 结果,我通过将字段更改为:
仔细检查了字段的格式DATE: Format([myDtField], "mm/dd/yyyy")
我再次 运行 查询 - 这减少了删除的记录数量,留下 905 条中的 734 条 - 但我的问题仍然存在 - 我仍然有日期比 120 更早的记录。
解决方案尝试 2
基于我的上述问题,我决定走另一条路。这次我为我的条件计算创建了一个唯一字段。对于我使用的字段值:
DateDiff: DateDiff("d",[myDtField],Date())
这导致值与正确值相差甚远(例如,昨天日期的记录结果为 43!)。
解决方案尝试 3
这不是一个解决方案,更多的只是故障排除,但根据我得到的结果,我一直认为我的日期没有被系统视为它显示的日期(即 DateValue() 是与显示值相比关闭)。我抽查了一些日期与他们的 DateValue() 和 运行domly 选择的记录似乎都是正确的。再次,运气不好。
解决方案尝试 4 @Gustov 让我想起了 DateValue() 函数。我也在该字段上尝试过 - 该字段作为文本字段导入,因此需要转换为日期值。类似于 Gustov 发布的公式,对于我使用的字段值:
DATEDIFF: DateDiff("d",Nz(DateValue([LASTPAYDT]),0),Date())
然后在标准中我简单地使用了公式:
>120
这会导致以下错误:
Data type mismatch in criteria expression
这可能是我拥有的最接近的解决方案,只是因为没有标准它 returns 正确的值(即昨天的日期返回“1”,而两天前的日期返回“2”。 .. ETC)。所以你会认为简单地限制该字段大于 120 的记录是可行的,但它会抛出上面的错误。
我的问题
- 有没有人知道如何检查记录字段是否为 120 天大还是更老?
- 如果我的上述任一解决方案都适用于问题 1,那么如果我以正确的方式处理它,我的日期字段可能有什么问题导致问题?
- @Gustov 的 DateValue() 解决方案很接近(即提供正确的值),但添加条件会导致错误。有什么解决办法吗?
我很茫然。将不胜感激对这个问题的额外关注。谢谢!
汉斯摸了摸东西。如果日期不是日期而是文本,试试这个:
Select * From YourTable
Where
IsDate([myDtField])
And
DateDiff("d", DateValue([myDtField]), Date()) > 120
我已经试过了并且有效,DATAText 是作为文本存储的数据。
SELECT Tabella1.ID, Tabella1.DATAText, Date() AS Espr1
FROM Tabella1
WHERE (cDate(Format(Tabella1.DataText,"yyyy-MM-dd hh:mm:ss")))<Date()-120;