MS Access:化合物大于低于比较

时间:2018-03-27 16:25:42

标签: sql vba ms-access access-vba ms-access-2016

问题很简单:为什么这会给出错误的答案(0)

IIf(Date()>=#3/16/2018#>=Date()-30,1,0)

虽然这给出了正确答案(1)

IIf(Date()>=#3/16/2018# AND #3/16/2018#>=Date()-30,1,0)

更具体地说,在第一种情况下Access正在做什么?

这种情况更令人好奇,因为当我执行此代码时,我得到一个意想不到的答案(1)

IIf(Date()<=#3/16/2018#<=Date()-30,1,0)

1 个答案:

答案 0 :(得分:3)

您无法在Access中进行复合比较!

使用上一个示例,Access首先执行第一次比较:

Date()<=#3/16/2018#

这可能会导致TrueFalse。我们说它是True

然后,Access评估第二个比较:

True <= Date() - 30

(这是因为它们是从左到右处理的,第一个是真的)。​​

这没有多大意义,但是Access可以将一个布尔值强制转换为数字(-1 = True,0 = False)和一个日期(例如,今天= 43186,因为日期定义为数字自1899年至12月30日以来的几天。

这意味着第二次比较结果如下:

-1 <= 43186 - 30

这当然是对的。你还看到,如果第一个比较是假的,那么第二个比较将是真的。你的比较几乎总是会回归真实。