- カテゴリ:
BITSHIFTRIGHT¶
数値式またはバイナリ式の n
位置のビットを右にシフトします。
- エイリアス:
BIT_SHIFTRIGHT
- こちらもご参照ください。
構文¶
BITSHIFTRIGHT( <expr1> , <n> )
引数¶
expr1
この式は、 INTEGER 値、BINARY 値、または INTEGER 値にキャストできるデータ型の値に評価される必要があります。
n
シフトするビット数です。
戻り値¶
INTEGER 値、 BINARY 値、または NULL を返します。
入力式に INTEGER 値が含まれている場合、入力データ値のサイズまたはデータ型に関係なく、符号付き128ビット(16バイト)整数を返します。
入力式に BINARY 値が含まれている場合、 BINARY 値を返します。
いずれかの引数が NULL の場合、 NULL を返します。
使用上の注意¶
引数のデータ型が 数値 で INTEGER ではない場合(例: FLOAT、 DECIMAL など)、引数は INTEGER 値にキャストされます。
引数のデータ型が文字列(VARCHAR など)の場合、可能であれば引数は INTEGER 値にキャストされます。例えば、文字列
12.3
は12
にキャストされます。値を INTEGER 値にキャストできない場合、値は NULL として扱われます。この関数は、引数を暗黙的に BINARY 値にキャストしません。
例¶
以下のセクションには、 INTEGER 引数値と BINARY 引数値の例が含まれています。
INTEGER 引数値での BITSHIFTLEFT と BITSHIFTRIGHT の使用¶
簡単なテーブルとデータを作成します。
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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTRIGHT(bit2, 1)
FROM bits
ORDER BY bit1;
+------+-------+-----------------------+------------------------+
| BIT1 | BIT2 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTRIGHT(BIT2, 1) |
|------+-------+-----------------------+------------------------|
| 0 | 65504 | 0 | 32752 |
| 1 | 1 | 2 | 0 |
| 2 | 4 | 4 | 2 |
| 4 | 2 | 8 | 1 |
| 16 | 24 | 32 | 12 |
| NULL | NULL | NULL | NULL |
+------+-------+-----------------------+------------------------+
BINARY 引数値での BITSHIFTRIGHT の使用¶
簡単なテーブルを作成し、データを挿入します。
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進数が含まれています。詳細については、 バイナリ入出力 をご参照ください。
クエリを実行します。
SELECT bit1,
bit3,
BITSHIFTRIGHT(bit1, 1),
BITSHIFTRIGHT(bit3, 1),
BITSHIFTRIGHT(bit1, 8),
BITSHIFTRIGHT(bit3, 16)
FROM bits;
+------+----------+------------------------+------------------------+------------------------+-------------------------+
| BIT1 | BIT3 | BITSHIFTRIGHT(BIT1, 1) | BITSHIFTRIGHT(BIT3, 1) | BITSHIFTRIGHT(BIT1, 8) | BITSHIFTRIGHT(BIT3, 16) |
|------+----------+------------------------+------------------------+------------------------+-------------------------|
| 1010 | 11001010 | 0808 | 08800808 | 0010 | 00001100 |
| 1100 | 01011010 | 0880 | 00808808 | 0011 | 00000101 |
| BCBC | ABCDABCD | 5E5E | 55E6D5E6 | 00BC | 0000ABCD |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+------------------------+------------------------+------------------------+-------------------------+