Битовая операция NOT в SQL Server: как переключить бит

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
8,774
Реакции
1,505
Credits
29,921
Битовая операция NOT в SQL Server: как переключить бит

Оператор XOR (^) позволяет инвертировать биты в SQL Server. Используя BitColumn = BitColumn ^ 1, вы сможете поменять 0 на 1 и наоборот.
SQL:
UPDATE ВашаТаблица SET BitColumn = BitColumn ^ 1 WHERE ВашеУсловие;
Этот запрос инвертирует значения в столбце BitColumn для строк, которые соответствуют условию ВашеУсловие.

Введение в битовые операции
Битовые операции — это эффективный инструмент для управления отдельными битами. Они выполняются с помощью операторов AND, OR, XOR и NOT.


Инструментарий для инвертирования бита
Инвертируем все с помощью NOT

Для инверсии всех битов в значении используйте оператор ~:
SQL:
-- Наблюдаем за инверсией всех битов!
UPDATE ваша_таблица SET ваш_столбец = ~ваш_столбец WHERE ваше_условие;


Инвертирование с помощью вычитания
Элегантный способ инвертирования бит со значениями 0 или 1:
SQL:
-- Из 0 делаем 1, из 1 — 0. Элегантно, не правда ли?
UPDATE ваша_таблица SET ваш_столбец = 1 – ваш_столбец WHERE ваше_условие;


Метод инвертирования нескольких битов
Для инвертирования определённых бит при наличии нескольких используйте XOR с битовой маской:
SQL:
-- Теперь нацеливаемся на определённый бит
UPDATE ваша_таблица SET ваш_столбец = ваш_столбец ^ битовая_маска WHERE ваше_условие;

Битовая_маска — это число, которое в двоичной системе имеет 1 там, где находится нужный бит, и 0 — во всех остальных позициях.

Визуализация
Представьте процесс инвертирования бит как переключение выключателя света:

Исходное состояние Переключить Результирующее состояние
Выкл (0) Вкл (1)
Вкл (1) Выкл (0)
В SQL это будет выглядеть следующим образом:
SQL:
UPDATE ваша_таблица SET ваш_столбец = 1 – ваш_столбец WHERE ваше_условие;

До инвертирования: ваш_столбец имеет значение (0) или (1). После инвертирования: теперь значение ваш_столбец противоположное — (1) или (0).

Тонкости работы
Когда вы инвертируете биты, учитывайте следующее:

✔️Тип данных: Удостоверьтесь, что операция выполняется над данными типа bit.
✔️Производительность: Ограничьте обновление условием WHERE, чтобы выполнить процесс эффективно.
✔️Точность инвертирования: Для работы с несколькими битами выберите правильную битовую маску.
✔️Безопасность: Используйте транзакции TRANSACTION для обеспечения надежности операций при работе с несколькими битами или строками.