BIT_AND 関数
BIT_AND 関数は、単一の整数列または式内のすべての値に対してビット単位の AND 演算を実行します。この関数は、式の整数値ごとに対応する各バイナリ値の各ビットを集計します。
値のすべてにおいてどのビットにも 1 が設定されていない場合、BIT_AND 関数は 0
の結果を返します。値のすべてにおいて 1 つ以上のビットに 1 が設定されている場合、関数は整数値を返します。この整数はこれらのビットのバイナリ値に対応する数値です。
例えば、テーブルは列に 4 つの整数値を含みます (3、7、10、および 22)。これらの整数は、次のようにバイナリで表されます。
整数 | バイナリ値 |
---|---|
3 | 11 |
7 | 111 |
10 | 1010 |
22 | 10110 |
このデータセットの BIT_AND 演算は、すべてのビットで最後から 2 番目の位置にのみ 1
が設定されていることが分かります。結果は、整数値 00000010
を表す 2
のバイナリ値です。したがって、BIT_AND 関数は 2
を返します。
構文
BIT_AND ( [DISTINCT | ALL] expression )
引数
- expression
-
関数の対象となる列または式。この式には、INT、INT2、または INT8 のデータ型がある必要があります。関数は同等の INT、INT2、または INT8 のデータ型を返します。
- DISTINCT | ALL
-
引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。詳細については、「ビット単位の集計の DISTINCT サポート」を参照してください。
例
有効な企業情報が整数列に保存されるとすると、ビット単位関数を使用してこの情報を抽出および集計できます。次のクエリは USERLIKES と呼ばれるテーブルの LIKES 列に BIT_AND 関数を適用し、CITY 列による結果をグループ化します。
select city, bit_and(likes) from userlikes group by city order by city; city | bit_and --------------+--------- Los Angeles | 0 Sacramento | 0 San Francisco | 0 San Jose | 64 Santa Barbara | 192 (5 rows)
これらの結果は次のように解釈できます。
-
サンタバーバラの整数値
192
は、バイナリ値11000000
に変換されます。つまり、この都市のすべてのユーザーがスポーツと演劇を好きですが、すべてのユーザーがその他のタイプのイベントを好きというわけではありません。 -
整数
64
は01000000
に変換されます。したがって、サンノゼのユーザーの場合、全員が好きなイベントタイプは演劇のみです。 -
他の 3 都市の
0
の値は、「好き」と回答したユーザーがこれらの都市で 1 人もいないことを示します。