SQL - целочисленный тип - бит обнаружения - PullRequest
12 голосов
/ 24 августа 2011

С помощью SQL я хотел бы определить, включен ли определенный бит с целочисленным типом столбца (MySQL)?

Как мне поступить?

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

Я сейчас использую что-то вроде этого:

WHERE (column & 2) != 2

Ответы [ 7 ]

14 голосов
/ 24 августа 2011

Скажем, вы проверяете третий бит, а затем ...

SELECT bits & 8 = 8 FROM table;

Возвращает двоичный код (1 или 0) для того, включен ли рассматриваемый бит (в данном случае третий) для каждой строки в столбце «биты».

используя 2 ^ x для x-го бита вместо 8.

например, для проверки 5-го бита мы будем использовать 2 ^ 5 = 32

SELECT bits & 32 = 32 FROM table;

Однако это излишне сложно. Просто используйте логические значения в нескольких столбцах, и это упростит задачу.

7 голосов
/ 24 августа 2011

Используйте &, оператор побитовое И :

SELECT ID, myfield
FROM mytable
WHERE (myfield & 16) > 0  
2 голосов
/ 24 августа 2011

SQL поддерживает стандартные битовые операторы:

DECLARE @BitMask INT
SET @BitMask = 34

SELECT 
    @BitMask & 32, -- Returns 32, ON 
    @BitMask & 16  -- Returns 0, OFF
1 голос
/ 24 августа 2011

Для mysql вы можете использовать побитовый оператор AND & с битовой маской

Например, чтобы получить логическое значение true, если установлен бит 2 (считая от 0)для столбца 1 используйте это:

where (column1 & 4) = 4

это будет работать для проверок нескольких битов, например, чтобы проверить, что установлены оба бита 0 и 2:

where (column1 & 5) = 5
0 голосов
/ 24 августа 2011

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

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

0 голосов
/ 24 августа 2011

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

Работа с битами SQL

0 голосов
/ 24 августа 2011

Вы должны пометить вопрос для платформы базы данных, которую вы используете.

Если это SQL Server 2008, вы можете использовать побитовые операторы (в частности, побитовые или равные) для сравнения с целым числом, биты которого установлены для шаблона, который вы хотите проверить для: http://msdn.microsoft.com/en-us/library/cc627409.aspx

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

...