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

обратите внимание, что, упаковывая целые числа таким образом, вы, вероятно, предотвращаете использование любых индексов в этих столбцах.


Я считаю, что это поможет вам достичь того, чего вы хотите:

SQL бит манипуляции


в TSQL, 1 = true, 0 = false.
В MS Access -1 = true, 0 = false.
...
Может быть, кто-то сможет заменить другие диалекты.

Если вы интерпретируете бит в слое приложения, вы должны иметь возможность использовать функцию преобразования (например, в vb вы можете сказать IF convert.toboolean(myValue) THEN... для интерпретации true или false.