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

时间:2014-03-28 09:23:26

标签: sql datetime ms-access-2007

我对访问数据库中的一个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秒然后问题解决但第一个查询应该工作为井

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中,某些时间调用的情况看起来似乎存在小错误。