我有一个有趣的问题,我一直无法找到答案!我正在编写查询,根据两个不同事件的时间来查看数据,两个单元到达某个位置的差异。这非常简单。
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]的字段,看起来它们以某种方式以不同方式存储。请参阅两个突出显示的记录。
什么使数据返回虽然它显然不应该?此外,每个日期范围都有一些类似的事件。
感谢您的想法和帮助。
答案 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的答案比我的好。