2016-01-17 2 views
1

Я создал эту таблицу:Как я могу запросить таблицу на основе бит в столбце?

CREATE TABLE [dbo].[Subject] (
    [SubjectId] INT   NOT NULL, 
    [Name]  NVARCHAR (50) NOT NULL, 
    [Type] BINARY(10) NULL, 
    CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED ([SubjectId] ASC) 
); 

Мое мышление, что столбец типа будет содержать двоичную строку, как это:

0000101010 
1000001010 
0000001011 
1000000011 

Что бы я тогда хотел бы быть в состоянии сделать это, например, запросите эту таблицу, чтобы найти определенный бит, но я не уверен, как это сделать. Так, например, как я могу запросить данные, чтобы посмотреть, какие строки соответствуют четвертому биту (справа), установленному в 1, а второй бит (справа), установленный в 1, который приведет к появлению трех строк, возвращаемых из данных выше ,

+1

Знаете ли вы, что ваше объявление предназначено для 11-байтового поля для 'Type'? –

ответ

1

Я бы не рекомендовал делать бит-фридинг, если вы действительно не знаете, что делаете.

Как правило, флагов tinyint вполне достаточно для большинства целей. Тем не менее, если у вас есть куча двоичных флагов и очень обеспокоены пространства, а затем объявить их каждый независимо друг от друга:

Flag1 bit not null, 
Flag2 bit not null, 
. . . 

Это дает название каждому «бит» и давайте базы данных управления бит пустячный.

В любом случае ответ на ваш конкретный вопрос - это битовые операторы, которые задокументированы here.

1

Вы можете запросить свои данные с помощью побитовых операторов в SQL.

См https://msdn.microsoft.com/en-us/library/ms176122.aspx

Something like 

SELECT * FROM table WHERE Type & 0x0001000 > 0 

Вы можете поэкспериментировать с константой используется для AND против (0x0001000). Но это говорит - получите все записи, где четвертый бит справа равен 1. (0x префикс обозначает двоичное представление)

Смежные вопросы