跳到主要内容
版本: 最新版本-3.5

bit_shift_right_logical

将数值表达式的二进制表示形式向右移动指定的位数。

此函数执行**逻辑右移**,在此期间位长不会改变,最低位被丢弃,并且无论原始位是正数还是负数,都在最高位附加 0。**逻辑**移位是无符号移位。例如,将10101移动一位会得到00101

对于正值,bit_shift_right() 和 bit_shift_right_logical() 返回相同的结果。

语法

bit_shift_right_logical(value, shift)

参数

value:要移动的值或数值表达式。支持的数据类型为 TINYINT、SMALLINT、INT、BIGINT 和 LARGEINT。

shift:要移动的位数。支持的数据类型为 BIGINT。

返回值

返回与value相同类型的值。

使用说明

  • 如果任何输入参数为 NULL,则返回 NULL。
  • 如果shift小于 0,则返回 0。
  • value移动0始终会得到原始value
  • 0移动一个shift始终会得到0
  • 如果value的数据类型是数值但不是整数,则该值将被强制转换为整数。请参阅示例
  • 如果value的数据类型是字符串,则该值将在可能的情况下强制转换为整数。例如,字符串“2.3”将被强制转换为 2。如果该值无法强制转换为整数,则该值将被视为 NULL。请参阅示例

示例

使用此函数来移动数值。

SELECT bit_shift_right_logical(2, 1);
+-------------------------------+
| bit_shift_right_logical(2, 1) |
+-------------------------------+
| 1 |
+-------------------------------+

SELECT bit_shift_right_logical(2.2, 1);
+---------------------------------+
| bit_shift_right_logical(2.2, 1) |
+---------------------------------+
| 1 |
+---------------------------------+

SELECT bit_shift_right_logical("2", 1);
+---------------------------------+
| bit_shift_right_logical('2', 1) |
+---------------------------------+
| 1 |
+---------------------------------+

SELECT bit_shift_right_logical(cast('-2' AS INTEGER(32)), 1);
+-----------------------------------------------+
| bit_shift_right_logical(CAST('-2' AS INT), 1) |
+-----------------------------------------------+
| 2147483647 |
+-----------------------------------------------+

参考