カテゴリ:

ビット単位の式関数

BITSHIFTLEFT

数値式またはバイナリ式の n 位置のビットを左にシフトします。

エイリアス:

BIT_SHIFTLEFT

こちらもご参照ください。

BITSHIFTRIGHT

構文

BITSHIFTLEFT( <expr1> , <n> )
Copy

引数

expr1

この式は、 INTEGER 値、BINARY 値、または INTEGER 値にキャストできるデータ型の値に評価される必要があります。

n

シフトするビット数です。

戻り値

INTEGER 値、 BINARY 値、または NULL を返します。

  • 入力式に INTEGER 値が含まれている場合、入力データ値のサイズまたはデータ型に関係なく、符号付き128ビット(16バイト)整数を返します。

  • 入力式に BINARY 値が含まれている場合、 BINARY 値を返します。

  • いずれかの引数が NULL の場合、 NULL を返します。

使用上の注意

  • いずれかの引数のデータ型が 数値 で INTEGER ではない場合(例: FLOAT、 DECIMAL など)、引数は INTEGER 値にキャストされます。

  • いずれかの引数のデータ型が文字列(VARCHAR など)の場合、可能であれば引数は INTEGER 値にキャストされます。例えば、文字列 12.312 にキャストされます。値を 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);
Copy
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.
  ;
Copy

クエリを実行します。

SELECT bit1, 
       bit2, 
       BITSHIFTLEFT(bit1, 1), 
       BITSHIFTRIGHT(bit2, 1)
  FROM bits
  ORDER BY bit1;
Copy
+------+-------+-----------------------+------------------------+
| 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);
Copy

注釈

BINARY 値は、 x'value' 表記で挿入されます。 value には16進数が含まれています。詳細については、 バイナリ入出力 をご参照ください。

クエリを実行します。

SELECT bit1,
       bit3,
       BITSHIFTLEFT(bit1, 1),
       BITSHIFTLEFT(bit3, 1),
       BITSHIFTLEFT(bit1, 8),
       BITSHIFTLEFT(bit3, 16)
  FROM bits;
Copy
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| 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                   |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+