我在相关表格中有一个日期字段。我试图创建一个只显示该日期字段为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的记录就可以了,但是它会引发上面的错误。
我不知所措。关于这个问题的另一组眼睛将非常感激。谢谢!
答案 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;