- カテゴリ:
BITSHIFTLEFT¶
数値式またはバイナリ式の n
位置のビットを左にシフトします。
- エイリアス:
BIT_SHIFTLEFT
- こちらもご参照ください。
構文¶
BITSHIFTLEFT( <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 として扱われます。符号付き INTEGER 値が返される場合で上位ビットの値が変更されると(0から1、または1から0に)、結果の符号が反転します。たとえば、
BITSHIFTLEFT(1, 127)
は負の数を返します。符号付き INTEGER 値が返される場合、128ビットの出力値の末尾を超えてシフトされたビットはドロップされます。
この関数は、引数を暗黙的に 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 引数値での BITSHIFTLEFT の使用¶
簡単なテーブルを作成し、データを挿入します。
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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTLEFT(bit3, 1),
BITSHIFTLEFT(bit1, 8),
BITSHIFTLEFT(bit3, 16)
FROM bits;
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| BIT1 | BIT3 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTLEFT(BIT3, 1) | BITSHIFTLEFT(BIT1, 8) | BITSHIFTLEFT(BIT3, 16) |
|------+----------+-----------------------+-----------------------+-----------------------+------------------------|
| 1010 | 11001010 | 2020 | 22002020 | 1000 | 10100000 |
| 1100 | 01011010 | 2200 | 02022020 | 0000 | 10100000 |
| BCBC | ABCDABCD | 7978 | 579B579A | BC00 | ABCD0000 |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+