类别:

按位表达式函数

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.3 转换为 12。如果该值无法转换为 INTEGER 值,则该值被视为 NULL。

  • 如果返回有符号的 INTEGER 值,且高位的值发生变化(从 0 到 1,或从 1 到 0),则结果的符号将相反。例如,BITSHIFTLEFT(1, 127) 返回一个负数。

  • 如果返回有符号的 INTEGER 值,移到 128 位输出值末尾之外的位将被丢弃。

  • 该函数不会将实参隐式转换为 BINARY 值。

示例

以下部分包含 INTEGER 实参值和 BINARY 实参值的示例。

将 BITSHIFTLEFT 和 BITSHIFTRIGHT 与 INTEGER 实参值结合使用

创建简单的表和数据:

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 |
+------+-------+-----------------------+------------------------+

将 BITSHIFTLEFT 与 BINARY 实参值结合使用

创建一个简单的表并插入数据:

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 包含十六进制数字。有关更多信息,请参阅 二进制输入和输出

运行查询:

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                   |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
语言: 中文