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#
这可能会导致 True
或 False
。假设它是 True
然后,Access 计算第二个比较:
True <= Date() - 30
(这是因为它们是从左到右处理的,第一个为真)
这没有多大意义,但 Access 可以将布尔值转换为数字(-1 = True,0 = False)和日期(例如,今天 = 43186,因为日期定义为自 1899-12-30 以来经过的天数。
这意味着第二次比较的结果是:
-1 <= 43186 - 30
确实如此。您还会看到,如果第一个比较为假,第二个比较仍然为真。您的比较几乎总是 return 正确。
问题很简单:为什么这个给出错误的答案(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#
这可能会导致 True
或 False
。假设它是 True
然后,Access 计算第二个比较:
True <= Date() - 30
(这是因为它们是从左到右处理的,第一个为真)
这没有多大意义,但 Access 可以将布尔值转换为数字(-1 = True,0 = False)和日期(例如,今天 = 43186,因为日期定义为自 1899-12-30 以来经过的天数。
这意味着第二次比较的结果是:
-1 <= 43186 - 30
确实如此。您还会看到,如果第一个比较为假,第二个比较仍然为真。您的比较几乎总是 return 正确。