MS Access 区分大小写的查询给出不正确的结果

MS Access Case sensitive query giving incorrect result

为什么这些查询会给出不同的结果? Reference 是一个单字符列,我希望有一个结果给出大写和小写字母 'r'.

的计数
Select SUM(IIF(StrComp([REFERENCE],'R',0) = 0, 1, 0)) AS BIG_R,
       SUM(IIF(StrComp([REFERENCE],'r',0) = 0, 1, 0)) AS LITTLE_R
From [SYMREF]
Where [PROGRAM] = 'SOMEPROGRAM'

结果是 BIG_R 和 LITTLE_R 相同并且等于 BIG_R 的

的计数

然而,

Select SUM(IIF(StrComp([REFERENCE],'r',0) = 0, 1, 0)) AS LITTE_R,
       SUM(IIF(StrComp([REFERENCE],'R',0) = 0, 1, 0)) AS BIG_R
From [SYMREF]
Where [PROGRAM] = 'SOMEPROGRAM'

再次 LITTLE_R 和 BIG_R 相同,但这次它们等于 LITTLE_R 的

的计数

这看起来像是 MS Access 处理此类查询的方式中的错误,或者我在这里遗漏了什么?

Access(或者更确切地说是 JetEngine)认为 StrComp 使用相同的参数被调用了两次,并优化了两次调用之一。

解决方法是比较 ASCII 字符值(Asc("r") = 114Asc("R") = 82):

Select 
    SUM(IIF(Asc([REFERENCE]) = Asc('R'), 1, 0)) AS BIG_R,
    SUM(IIF(Asc([REFERENCE]) = Asc('r'), 1, 0)) AS LITTLE_R
From [SYMREF]
Where [PROGRAM] = 'SOMEPROGRAM'

另一种解决方法:

Select SUM(IIF(StrComp([REFERENCE],Chr$(82),0) = 0, 1, 0)) AS BIG_R,
       SUM(IIF(StrComp([REFERENCE],Chr$(114),0) = 0, 1, 0)) AS LITTLE_R
From [SYMREF]
Where [PROGRAM] = 'SOMEPROGRAM'

这里 StrComp 的两个输入明显不同。所以,第二个调用没有优化掉。