LEFT_SHIFT (Transact SQL)

适用于:SQL Server 2022 (16.x) Azure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

LEFT_SHIFT 采用两个参数,并返回第一个参数按第二个参数中指定位数左移的位。

还可以通过 << 运算符访问 LEFT_SHIFT 函数。

Transact-SQL 语法约定

语法

LEFT_SHIFT ( expression_value, shift_amount )
expression_value << shift_amount

参数

expression_value

任何不是大型对象 (LOB) 的整数或二进制表达式。

shift_amount

expression_value 应移动的位数。 shift_amount 必须是整数类型。

返回类型

返回与该 expression_value 相同的类型。

shift_amount 参数会强制转换为 bigint。 参数可以是正数或负数,也可以大于 expression_value 数据类型中的位数。 当 shift_amount 为负时,移动按相反方向进行。 例如,LEFT_SHIFT (expr, -1)RIGHT_SHIFT (expr, 1) 相同。 当 shift_amount 大于 expression_value 的位数时,返回的结果将为 0

LEFT_SHIFT 会执行逻辑转移。 位移动后,无论原始值是正还是负,任何空置位置都将填充 0

备注

在初始实现中,链接服务器中的位操作函数的分布式查询功能或即席查询 (OPENQUERY) 不受支持。

Microsoft Fabric 目前不支持 LEFT_SHIFT 函数的 << 方法。

示例

在以下示例中,整数值 12345 向左移 5 位。

SELECT LEFT_SHIFT(12345, 5);

结果为 395040。 如果将 12345 转换为二进制文件,就会得到 0011 0000 0011 1001。 将其向左移动 5 变为 0110 0000 0111 0010 0000,即十进制的 395040

下表演示了每次移动发生的情况。

整数值 二进制值 说明
12345 0011 0000 0011 1001 起始值
24690 0110 0000 0111 0010 向左移动 1
49380 1100 0000 1110 0100 向左移动 2
98760 0001 1000 0001 1100 1000 向左移动 3,
打开新字节
197520 0011 0000 0011 1001 0000 向左移动 4
395040 0110 0000 0111 0010 0000 向左移动 5

请参阅