SQL-целочисленный тип-бит обнаружения
С SQL я хотел бы определить, включен ли определенный бит с целочисленным типом столбца (MySQL)?
Как бы я это сделал?
в принципе, я хочу определить, включен ли бит, если он включен, а затем игнорировать.
Я использую что-то вроде этого вот :
WHERE (column & 2) != 2
7 ответов
скажите, что вы проверяете 3-й бит...
SELECT bits & 8 = 8 FROM table;
Это возвращает двоичный код (1 или 0) для того, включен или выключен соответствующий бит (в данном случае третий) для каждой строки в столбце "bits".
использование 2^x для X-го бита вместо 8.
например, чтобы проверить 5-й бит, мы будем использовать 2^5 = 32
SELECT bits & 32 = 32 FROM table;
однако, это излишне сложным. Просто используйте логические значения в нескольких Столбцах, и это многое сделает облегчающий.
использовать &
на побитовое и оператор:
SELECT ID, myfield
FROM mytable
WHERE (myfield & 16) > 0
SQL поддерживает стандартные битовые операторы:
DECLARE @BitMask INT
SET @BitMask = 34
SELECT
@BitMask & 32, -- Returns 32, ON
@BitMask & 16 -- Returns 0, OFF
для mysql вы можете использовать бит-мудрый AND
оператор &
С маской
например, чтобы получить логическое true
если бит 2 (отсчет от 0) установлен для столбца 1, Используйте это:
where (column1 & 4) = 4
это будет работать для нескольких битовых проверок, например, чтобы проверить, что оба бита 0 и 2 установлены:
where (column1 & 5) = 5
вы должны пометить вопрос для платформы базы данных, которую вы используете.
Если это в SQL Server 2008, вы могли бы использовать побитовые операторы (в частности, побитовое или "равно") сравните в целое число, биты устанавливаются в шаблон вы заинтересованы в тестировании: http://msdn.microsoft.com/en-us/library/cc627409.aspx
обратите внимание, что, упаковывая целые числа таким образом, вы, вероятно, предотвращаете использование любых индексов в этих столбцах.
в TSQL, 1 = true, 0 = false.
В MS Access -1 = true, 0 = false.
...
Может быть, кто-то сможет заменить другие диалекты.
Если вы интерпретируете бит в слое приложения, вы должны иметь возможность использовать функцию преобразования (например, в vb вы можете сказать IF convert.toboolean(myValue) THEN...
для интерпретации true или false.