Вопрос по sql-server, tsql, bit-manipulation – Операции переворачивания битов в T-SQL

16

У меня есть битовое поле int в моей базе данных. Обычно я управляю этим через код C #, но теперь мне нужно немного перевернуть маску с помощью T-SQL

Как мне сделать следующее:

The bit I want to flip: 1 << 8 (256)

The mask value before I flip: 143

The mask value after I flip: 399

Это может быть сделано без битовых операторов, которые отсутствуют в T-SQL, верно?

Ваш Ответ

2   ответа
20

Вот и хорошая статья о том, как их использоватьВот

Вопрос в том, чтобы немного сдвинуться, опубликованные вами статьи не имеют к этому никакого отношения.
Речь идет о переворачивании битов, а не о сдвиге битов.
Название ошибочно относится к битовому сдвигу, но актуальный вопрос о битовом флипе.
верно, это то, что я сказал.
25

Используйте XOR:

SELECT value ^ 256

Так что в вашем случае,SELECT 143 ^ 256 действительно вернет 399. Если вы хотите передать также и показатель степени:

SELECT value ^ POWER(2, power)
Спасибо! Это решило мою проблему! Есть ли способ элегантно включить бит? (Я уже сделал это, но выглядит уродливо ...) Christian Dalager
Вы хотите перевернуть или включить? Flip - использовать XOR (^); включить - используйте ИЛИ (|). Если вы хотите больше элегантности, оберните в кратко названную пользовательскую функцию. :)

Похожие вопросы