2

ORの集約関数のブール列でやりたかったのでgroup by、論理的にはMax、この関数を選択しました。TRUE < FALSEしかし、私はMS Accessでそれを見つけました! MS Access はではなく にエイリアスTRUEしているようです。-11

私はMySQLで同じことを試しましたが、うまくいっているようです:

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

何故ですか?一体なぜ Access はここで SQL の規範を破ったのでしょうか?

4

2 に答える 2

2

この回答から:

False のバイナリ表現は 0000000000000000 です。(機械語で) NOT 演算を実行すると、1111111111111111 に変更されますが、これは 16 ビット符号付き整数 -1 のバイナリ表現です。

数値の符号の変更は、すべてのビットを反転して 1 を追加することによって行われます。これは「2 の補数」と呼ばれます。

1111111111111111 の符号を変更してみましょう。取得: 0000000000000000

次に 1 を追加します: 0000000000000001、これは 1 です。

これは、1111111111111111 が -1 の 2 進数表現であったことの証明です。

于 2013-08-08T12:06:26.347 に答える
1

はい、MSAccess では true の値は -1 です。

それは Visual Basic のルーツと関係があるかもしれません (VB では -1 は、BITWISE 演算子が論理演算子としての二重の義務を果たすのを助けるために true です)

于 2013-08-08T12:07:40.123 に答える