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

Область применения: 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

Диаграмма, показывающая значение int, где 4 байта представляют перевернутый двоичный код каждого байта слева направо.

smallint

Диаграмма, показывающая значение small int, где первый байт представляет биты с 15 по 8, а второй байт представляет биты с 7 по 0.

Функции

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

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

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

Замечания

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