LEFT_SHIFT (Transact SQL)
Applies to: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
LEFT_SHIFT takes two parameters, and returns the first parameter bit-shifted left by the number of bits specified in the second parameter.
The LEFT_SHIFT function is also accessible through the <<
operator.
Transact-SQL syntax conventions
Syntax
LEFT_SHIFT ( expression_value, shift_amount )
expression_value << shift_amount
Arguments
expression_value
Any integer or binary expression that isn't a large object (LOB).
shift_amount
The number of bits by which expression_value should be shifted. shift_amount must be an integer type.
Return types
Returns the same type as expression_value.
The shift_amount parameter is cast to a bigint. The parameter can be positive or negative, and can also be greater than the number of bits in the datatype of expression_value. When shift_amount is negative, the shift operates in the opposite direction. For example, LEFT_SHIFT (expr, -1)
is the same as RIGHT_SHIFT (expr, 1)
. When shift_amount is greater than the number of bits in expression_value, the result returned will be 0
.
LEFT_SHIFT performs a logical shift. After bits are shifted, any vacant positions will be filled by 0
, regardless of whether the original value was positive or negative.
Remarks
In the initial implementation, Distributed Query functionality for the bit manipulation functions within linked server or ad hoc queries (OPENQUERY) won't be supported.
The <<
method for the LEFT_SHIFT
function is not currently supported in Microsoft Fabric.
Examples
In the following example, the integer value 12345 is left-shifted by 5 bits.
SELECT LEFT_SHIFT(12345, 5);
The result is 395040. If you convert 12345 to binary, you have 0011 0000 0011 1001
. Shifting this to the left by 5 becomes 0110 0000 0111 0010 0000
, which is 395040
in decimal.
The following table demonstrates what happens during each shift.
Integer value | Binary value | Description |
---|---|---|
12345 | 0011 0000 0011 1001 |
Starting value |
24690 | 0110 0000 0111 0010 |
Shift left by 1 |
49380 | 1100 0000 1110 0100 |
Shift left by 2 |
98760 | 0001 1000 0001 1100 1000 |
Shift left by 3, and open into a new byte |
197520 | 0011 0000 0011 1001 0000 |
Shift left by 4 |
395040 | 0110 0000 0111 0010 0000 |
Shift left by 5 |