访问查询日期/时间返回不适当的记录

时间:2017-08-14 18:09:54

标签: ms-access access-vba

我有一个有趣的问题,我一直无法找到答案!我正在编写查询,根据两个不同事件的时间来查看数据,两个单元到达某个位置的差异。这非常简单。

data and part two 请参阅下文“第二部分”澄清。

[Elapsed_Time]计算为两者之间的差异,是日期/时间。

使用的第一个查询是查看差异小于30秒的所有事件。

qry = "INSERT INTO [table] SELECT * FROM [New Data] WHERE ([1st_Agency_Onscene] = 'ABCD') AND ([Elapsed_Time] < #12:00:30 AM#);"
DoCmd.RunSQL qry

当查询运行时,它应该返回279行,而是返回281,另外两个。查看另外两行,将返回以下内容:

现在参考上一张图片中的“第二部分”(我可能只有两个链接!)。

他们都是30秒,所以他们不应该被退回。还有其他记录也没有返回30秒的时间(6个,总共8个)。

我不确定他们如何/为什么存储的方式与30秒的其他存储方式不同。为了找到差异,我创建了一个从第一个中减去[2nd_Agency_Onscene_Time]的字段,看起来它们以某种方式以不同方式存储。请参阅两个突出显示的记录。

perhaps this is significant

什么使数据返回虽然它显然不应该?此外,每个日期范围都有一些类似的事件。

感谢您的想法和帮助。

2 个答案:

答案 0 :(得分:2)

这是因为您正在比较作为Date的基础数据类型的双精度。

因此,使用例如替换([Elapsed_Time] < #12:00:30 AM#)

的本机函数
(DateDiff('s', [Elapsed_Time], #12:00:30 AM#) > 0)

答案 1 :(得分:1)

这是因为Access存储日期/时间的方式。它存储为double,数字1表示一天,小数表示小时,分钟和秒。您的计算返回的内容略小于30秒,即.00034722221607808小于.000347222 ...但都显示为12:00:30。

我会通过改变你的计算来解决这个问题,把时间变成一个整数,然后在找到经过的时间之前找出整数之间的差异。

FYI Gustav的答案比我的好。