Функции поразрядной операции

Область применения: конечная точка аналитики SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure SQL в хранилище Microsoft Fabricв Microsoft Fabric

Функции поразрядной операции, такие как перемещение, извлечение (получение), установка или подсчет отдельных битов в целочисленном или двоичном значении, позволяют обрабатывать и хранить данные более эффективно, чем с отдельными битами.

Бит имеет два значения (1 или 0, которые представляют on, off, true или false). Байт состоит из последовательности 8 битов. Функции поразрядной операции в SQL Server рассматривают "крайний левый" бит в байте как самый большой (самый значительный). Для функций поразрядной операции биты нумеруются справа налево, при этом бит 0 является крайним правым и наименьшим, а бит 7 — крайним левым и наибольшим.

Например, двоичная последовательность 00000111 является десятичным эквивалентом числа 7. Вы можете вычислить это с помощью полномочий 2 следующим образом:

00000111 = (2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7)

На практике это означает, что в то время как SQL Server сохраняет это значение как 11100000 (с обратными байтами), функции поразрядной операции будут рассматривать это как 00000111.

При просмотре нескольких байтов первый байт (чтение слева направо) является самым большим.

Указанные ниже изображения можно использовать для визуализации того, как функции поразрядной операции SQL Server интерпретируют значения битовых и байтовых выражений и смещения битов.

int

Diagram showing an int value where 4 bytes represent the reversed binary of each byte from left to right.

smallint

Diagram showing a small int value where the first byte represents bits 15 to 8, and the second byte represents bits 7 to 0.

Функции

Имеется пять функций, доступных для управления битами в SQL Server:

Все пять функций предназначены для работы с типами данных tinyint, smallint, int, bigint, binary(n) и varbinary(n).

Следующие типы не поддерживаются: varchar, nvarchar, image, ntext, text, xml и table.

Замечания

В начальной реализации функциональность распределенных запросов для функций поразрядных операций на связанном сервере или в специальных запросах (OPENQUERY) не будет поддерживаться.