MS Access:复合大于小于比较

MS Access: Compound greater than less than comparisons

问题很简单:为什么这个给出错误的答案(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)

您不能在 Access 中进行复合比较!

使用您的最后一个示例,Access 首先执行第一个比较:

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

这可能会导致 TrueFalse。假设它是 True

然后,Access 计算第二个比较:

True <= Date() - 30

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

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

这意味着第二次比较的结果是:

-1 <= 43186 - 30

确实如此。您还会看到,如果第一个比较为假,第二个比较仍然为真。您的比较几乎总是 return 正确。