TRUE<在MS Access中为FALSE?

时间:2013-08-08 12:02:31

标签: sql database ms-access

我想在OR的聚合函数中对布尔列执行group by,从逻辑上讲,我为此选择了Max函数。但我在MS Access中发现了TRUE < FALSE!似乎MS Access将TRUE别名变为-1而不是1

我在MySQL中尝试过相同的工作,似乎工作正常:

mysql> select if(TRUE > FALSE, 1, 0);
+------------------------+
| if(TRUE > FALSE, 1, 0) |
+------------------------+
|                      1 |
+------------------------+

为什么?为什么Access在这里打破了SQL规范?

2 个答案:

答案 0 :(得分:2)

来自This answer

  

False的二进制表示为0000000000000000.如果对它执行NOT操作(在机器代码中),它将更改为1111111111111111,但这是16位有符号整数-1的二进制表示。

     

通过反转所有位并加1来改变数字的符号。这称为“二进制补码”。

     

让我们改变1111111111111111的标志。我们得到:0000000000000000

     

然后添加一个:0000000000000001,这是1。

     

这证明1111111111111111是-1的二进制表示。

答案 1 :(得分:1)

在MSAccess中是,值为true。

它可能与它的Visual Basic根有关(在VB -1中是真的,以帮助它的BITWISE运算符作为逻辑运算符执行双重任务),但我不会感到惊讶,MSAccess打破了许多许多 SQL规范。