Инвертирование бита в SQL при вставке данных: обзор методов
Быстрый ответ
Для инверсии битов воспользуйтесь оператором XOR ^
совместно с 1
:
INSERT INTO galaxy (jedi_or_sith) VALUES (midiclorian_intensity ^ 1);
Таким образом, 0
(это Джедай) будет превратиться в 1
(то есть в Ситха), и наоборот, во время процесса записи в таблицу.
Использование тильды для инвертирования бита
Оператор тильда ~
— это классический выбор для инверсии бита в SQL Server, выполняющий роль оператора побитового НЕ:
INSERT INTO table_name (bit_column) SELECT ~bit_value FROM source_table;
1
превратится в 0
, и наоборот.
Обработка NULL и не битовых столбцов
При встрече NULL, используйте функцию ISNULL:
INSERT INTO table_name (bit_column) SELECT ISNULL(~bit_value, default_value) FROM source_table;
Если столбцы не являются битовыми, примените вычитание:
INSERT INTO table_name (int_column) VALUES (1 – original_int_value);
Таким образом, вы корректно преобразуете значения 0
и 1
, не допуская получения 2
.
Мудрость Джедаев и хитрости Ситхов
Избегайте использования оператора NOT и функции ABS для инвертирования битов: они предназначены для других задач.
Визуализация
Смена битового значения в SQL напоминает работу выключателя:
INSERT INTO room (light_status) VALUES (1); // Свет включён 💡───1️⃣
А в случае с оператором NOT:
INSERT INTO room (light_status) VALUES (NOT current_light_status);
Вы видите смену состояния света с 1 на 0 — как если бы Вейдер выключил свет.
Боевая стратегия: эффективность и производительность
Используйте форму INSERT INTO ... SELECT
в сочетании с тильдой ~
для обработки больших объёмов данных:
INSERT INTO new_empire (role)
SELECT ~current_role
FROM old_republic;
Быстро и эффективно меняйте роли огромного числа записей.
Другие галактики, иные правила
В системах вроде SQL Server зачастую применяют бинарный оператор 1 – bitValue
. Однако он находится в меньшем спросе.
INSERT INTO table_name (bit_column) VALUES (1 – original_bit_value);
Обычно предпочтительнее оставаться верными проверенным ~
и ^
.
Полезные материалы
- Описание типа данных BIT в MS SQL Server — подробности.
- Руководство по использованию INSERT в SQL Server — обширное изложение от Microsoft.
- Обсуждения и ответы на вопросы по теме SQL и биты — достоинство и опыт сообщества.
- Статья о применении функции IIF в SQL — рассмотрение вопроса на примерах из практики.