- 类别:
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 实参值的示例。
将 BITSHIFTLEFT 和 BITSHIFTRIGHT 与 INTEGER 实参值结合使用¶
创建简单的表和数据:
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 |
+------+-------+-----------------------+------------------------+
将 BITSHIFTRIGHT 与 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);
备注
BINARY 值是使用 x'value'
表示法插入的,其中 value
包含十六进制数字。有关更多信息,请参阅 二进制输入和输出。
运行查询:
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 |
+------+----------+------------------------+------------------------+------------------------+-------------------------+