我对访问数据库中的一个sql查询有非常奇怪的行为。我试图检查日历中的某个时间段是否空闲,因此我要检查两个特定日期时间之间是否有任何项目。 (vrijeme
SELECT eventDate, startTIme, startTIme+ duration, duration
FROM tblTermins
WHERE
AND eventDate = #2014-03-30#
AND (
(startTIme <= #11:00:00# AND (startTIme + duration) >= #11:15:00#)
OR (startTIme <= #11:00:00# AND (startTIme + duration) > #11:00:00#)
OR (startTIme < #11:15:00# AND (startTIme + duration) >= #11:15:00#)
OR (startTIme >= #11:00:00# AND (startTIme + duration) <= #11:15:00#)
)
我明白了:
eventDate startTIme startTIme + duration duration
30.3.2014. 10:45:00 11:00:00 0:15:00
奇怪的是,我根本不应该获得那一行,因为它不符合标准。我检查了11点到11点15分之间的时间段,我在10点45分到11点之间排了一排。 如果我将OR(startTIme&lt; =#11:00:00#AND(startTIme + duration)&gt;#11:00:00#)更改为 或(startTIme&lt; =#11:00:00#AND(startTIme + duration)&gt;#11:00: 01 #),加1秒然后问题解决但第一个查询应该工作为井
答案 0 :(得分:0)
我做了一些测试,减去了日期/时间类型的时间分区。
eventDate startTime duration
--------- --------- --------
2014-03-30 10:45:00 00:15:00
... ... ...
SELECT eventDate, startTIme, duration, startTIme+duration AS endTime,
CDbl(startTIme+duration) AS endTimeValue,
CDbl(#11:00:00#) as elevenClockValue,
CDbl(startTIme+duration - #11:00:00#) As calculationDifference
FROM tblTermins
WHERE
[startTime]+[duration] >#11:00:00#
eventDate startTIme duration endTime endTimeValue elevenClockValue calculationDifference
--------- --------- -------- ------- ------------ ---------------- ---------------------
30.03.2014 10:45:00 0:15:00 11:00:00 0,4583333333333 0,45833333333333 5,55111512312578E-17
在数学运算中添加/扣除时间值并转换为数值后,我们得到的小分区与预期时间不同。
因此,如果它与应用程序数据和逻辑不冲突,我们可以舍入数值或加1秒。
即使这个查询也会返回一些差异
SELECT Cdbl(#10:45:00# + #00:15:00# - #11:00:00#) FROM tblTermins
Result
--------------------
5,55111512312578E-17
在另外的测试中,我发现在大多数情况下,我会因减法或添加时间值而获得正确的值。
例如:
SELECT Cdbl(#10:35:00# + #00:25:00# - #11:00:00#) FROM tblTermins
Result
--------------------
0
在Access中,某些时间调用的情况看起来似乎存在小错误。