MS访问添加/减去dataTime时间分区



我真的有一个奇怪的行为在访问数据库的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 <= #11:00:00# AND (startTIme + duration)> #11:00:00#)更改为OR (startTIme <= #11:00:00# AND (startTIme + duration)># 11:00:01#),添加1秒则问题解决,但第一个查询应该也是

我做了一些测试,减去日期/时间类型的时间分区。

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的某些情况下,时间计算似乎存在小错误

相关内容

  • 没有找到相关文章

最新更新