- カテゴリ:
BITOR¶
2つの数値式またはバイナリ式のビット単位 OR を返します。
- エイリアス:
BIT_OR
- こちらもご参照ください。
構文¶
BITOR( <expr1> , <expr2> [ , '<padside>' ] )
引数¶
expr1
この式は、 INTEGER 値、BINARY 値、または INTEGER 値にキャストできるデータ型の値に評価される必要があります。
expr2
この式は、 INTEGER 値、BINARY 値、または INTEGER 値にキャストできるデータ型の値に評価される必要があります。
'padside'
2つの BINARY 引数値が同じ長さでない場合、短い方の値のどちら側に埋め込むかを指定します。以下の大文字と小文字を区別しない値のいずれかを指定します。
LEFT - 値の左側に埋め込みます。
RIGHT - 値の右側に埋め込みます。
短い方の値は、大きい方の値の長さと同じになるようにゼロで埋め込みます。
この引数は、 BINARY 式が指定されている場合にのみ有効です。
2つの BINARY 値の長さが異なる場合、この引数が必要です。
戻り値¶
INTEGER 値、 BINARY 値、または NULL を返します。
入力式に INTEGER 値が含まれる場合、入力式のビット単位 OR を表す INTEGER 値を返します。
入力式に BINARY 値が含まれる場合、入力式のビット単位 OR を表す BINARY 値を返します。
いずれかの入力値が NULL の場合、 NULL を返します。
使用上の注意¶
どちらの入力式も、同じデータ型(INTEGER または BINARY のいずれか)の値に評価される必要があります。
いずれかの引数のデータ型が 数値 であるけれども INTEGER ではない場合(例: FLOAT、 DECIMAL など)、引数は INTEGER 値にキャストされます。
いずれかの引数のデータ型が文字列(VARCHAR など)の場合、可能であれば引数は INTEGER 値にキャストされます。例えば、文字列
12.3
は12
にキャストされます。値を INTEGER 値にキャストできない場合、値は NULL として扱われます。この関数は、引数を暗黙的に BINARY 値にキャストしません。
例¶
以下のセクションには、 INTEGER 引数値と BINARY 引数値の例が含まれています。
INTEGER 引数値での BITAND、 BITOR、 BITXOR の使用¶
簡単なテーブルを作成し、データを挿入します。
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
INSERT INTO bits (ID, bit1, bit2) VALUES
( 11, 1, 1), -- Bits are all the same.
( 24, 2, 4), -- Bits are all different.
( 42, 4, 2), -- Bits are all different.
( 1624, 16, 24), -- Bits overlap.
(65504, 0, 65504), -- Lots of bits (all but the low 6 bits).
( 0, NULL, NULL) -- No bits.
;
クエリを実行します。
SELECT bit1,
bit2,
BITAND(bit1, bit2),
BITOR(bit1, bit2),
BITXOR(bit1, BIT2)
FROM bits
ORDER BY bit1;
+------+-------+--------------------+-------------------+--------------------+
| BIT1 | BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+-------+--------------------+-------------------+--------------------|
| 0 | 65504 | 0 | 65504 | 65504 |
| 1 | 1 | 1 | 1 | 0 |
| 2 | 4 | 0 | 6 | 6 |
| 4 | 2 | 0 | 6 | 6 |
| 16 | 24 | 16 | 24 | 8 |
| NULL | NULL | NULL | NULL | NULL |
+------+-------+--------------------+-------------------+--------------------+
BINARY 引数値での BITAND、 BITOR、 BITXOR の使用¶
簡単なテーブルを作成し、データを挿入します。
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 BINARY(2), bit2 BINARY(2), bit3 BINARY(4));
INSERT INTO bits VALUES
(1, x'1010', x'0101', x'11001010'),
(2, x'1100', x'0011', x'01011010'),
(3, x'BCBC', x'EEFF', x'ABCDABCD'),
(4, NULL, NULL, NULL);
注釈
BINARY 値は、 x'value'
表記で挿入されます。 value
には16進数が含まれています。詳細については、 バイナリ入出力 をご参照ください。
同じ長さの BINARY 列に対してクエリを実行します。
SELECT bit1,
bit2,
BITAND(bit1, bit2),
BITOR(bit1, bit2),
BITXOR(bit1, bit2)
FROM bits;
+------+------+--------------------+-------------------+--------------------+
| BIT1 | BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+------+--------------------+-------------------+--------------------|
| 1010 | 0101 | 0000 | 1111 | 1111 |
| 1100 | 0011 | 0000 | 1111 | 1111 |
| BCBC | EEFF | ACBC | FEFF | 5243 |
| NULL | NULL | NULL | NULL | NULL |
+------+------+--------------------+-------------------+--------------------+
'padside'
引数を指定せずに、長さの異なる BINARY 列に対してクエリを実行しようとすると、エラーが返されます。
SELECT bit1,
bit3,
BITAND(bit1, bit3),
BITOR(bit1, bit3),
BITXOR(bit1, bit3)
FROM bits;
100544 (22026): The lengths of two variable-sized fields do not match: first length 2, second length 4
長さの異なる BINARY 列に対してクエリを実行し、小さい方の引数値の左側に埋め込みます。
SELECT bit1,
bit3,
BITAND(bit1, bit3, 'LEFT'),
BITOR(bit1, bit3, 'LEFT'),
BITXOR(bit1, bit3, 'LEFT')
FROM bits;
+------+----------+----------------------------+---------------------------+----------------------------+
| BIT1 | BIT3 | BITAND(BIT1, BIT3, 'LEFT') | BITOR(BIT1, BIT3, 'LEFT') | BITXOR(BIT1, BIT3, 'LEFT') |
|------+----------+----------------------------+---------------------------+----------------------------|
| 1010 | 11001010 | 00001010 | 11001010 | 11000000 |
| 1100 | 01011010 | 00001000 | 01011110 | 01010110 |
| BCBC | ABCDABCD | 0000A88C | ABCDBFFD | ABCD1771 |
| NULL | NULL | NULL | NULL | NULL |
+------+----------+----------------------------+---------------------------+----------------------------+
長さの異なる BINARY 列に対してクエリを実行し、小さい方の引数値の右側に埋め込みます。
SELECT bit1,
bit3,
BITAND(bit1, bit3, 'RIGHT'),
BITOR(bit1, bit3, 'RIGHT'),
BITXOR(bit1, bit3, 'RIGHT')
FROM bits;
+------+----------+-----------------------------+----------------------------+-----------------------------+
| BIT1 | BIT3 | BITAND(BIT1, BIT3, 'RIGHT') | BITOR(BIT1, BIT3, 'RIGHT') | BITXOR(BIT1, BIT3, 'RIGHT') |
|------+----------+-----------------------------+----------------------------+-----------------------------|
| 1010 | 11001010 | 10000000 | 11101010 | 01101010 |
| 1100 | 01011010 | 01000000 | 11011010 | 10011010 |
| BCBC | ABCDABCD | A88C0000 | BFFDABCD | 1771ABCD |
| NULL | NULL | NULL | NULL | NULL |
+------+----------+-----------------------------+----------------------------+-----------------------------+