Битовая операция NOT в SQL Server: как переключить битОператор
XOR (^) позволяет инвертировать биты в SQL Server. Используя
BitColumn = BitColumn ^ 1, вы сможете поменять 0 на 1 и наоборот.
UPDATE ВашаТаблица SET BitColumn = BitColumn ^ 1 WHERE ВашеУсловие;
Этот запрос инвертирует значения в столбце BitColumn для строк, которые соответствуют условию
ВашеУсловие.
Введение в битовые операцииБитовые операции — это эффективный инструмент для управления отдельными битами. Они выполняются с помощью операторов
AND,
OR,
XOR и
NOT.
Инструментарий для инвертирования битаИнвертируем все с помощью NOTДля инверсии всех битов в значении используйте оператор ~:
-- Наблюдаем за инверсией всех битов!
UPDATE ваша_таблица SET ваш_столбец = ~ваш_столбец WHERE ваше_условие;
Инвертирование с помощью вычитанияЭлегантный способ инвертирования бит со значениями 0 или 1:
-- Из 0 делаем 1, из 1 — 0. Элегантно, не правда ли?
UPDATE ваша_таблица SET ваш_столбец = 1 – ваш_столбец WHERE ваше_условие;
Метод инвертирования нескольких битовДля инвертирования определённых бит при наличии нескольких используйте XOR с битовой маской:
-- Теперь нацеливаемся на определённый бит
UPDATE ваша_таблица SET ваш_столбец = ваш_столбец ^ битовая_маска WHERE ваше_условие;
Битовая_маска — это число, которое в двоичной системе имеет 1 там, где находится нужный бит, и 0 — во всех остальных позициях.
ВизуализацияПредставьте процесс инвертирования бит как переключение выключателя света:
Исходное состояние Переключить Результирующее состояниеВыкл (0) 🔄 Вкл (1)
Вкл (1) 🔄 Выкл (0)
В SQL это будет выглядеть следующим образом:
UPDATE ваша_таблица SET ваш_столбец = 1 – ваш_столбец WHERE ваше_условие;
До инвертирования: ваш_столбец имеет значение 😐(0) или 😃(1).
После инвертирования: теперь значение
ваш_столбец противоположное — 😃(1) или 😐(0).
Тонкости работыКогда вы инвертируете биты, учитывайте следующее:
✔️Тип данных: Удостоверьтесь, что операция выполняется над данными типа bit.
✔️Производительность: Ограничьте обновление условием WHERE, чтобы выполнить процесс эффективно.
✔️Точность инвертирования: Для работы с несколькими битами выберите правильную битовую маску.
✔️Безопасность: Используйте транзакции TRANSACTION для обеспечения надежности операций при работе с несколькими битами или строками.
#db
👉
@database_info