如何根据列中的位查询表?

时间:2016-01-17 13:45:30

标签: sql sql-server

我创建了这个表:

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)
);

我的想法是Type列包含一个二进制字符串,如下所示:

0000101010 
1000001010
0000001011
1000000011

我希望能够做的是例如查询此表以查找正在设置的特定位但我不知道如何执行此操作。因此,例如,如何查询数据以查看哪些行匹配第四位(从右侧)设置为1,第二位(从右侧)设置为1,这将导致从上面的数据返回三行

2 个答案:

答案 0 :(得分:1)

除非你真的知道自己在做什么,否则我不建议做点小提琴。

通常,tinyint的标记对于大多数用途来说已经足够了。但是,如果你有一堆二进制标志并且非常关注空间,那么每个都单独声明它们:

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

这给每个“位”命名,让数据库管理小提琴。

在任何情况下,您的具体问题的答案都是逐位运算符,记录在案here

答案 1 :(得分:1)

您可以使用SQL中的按位运算符查询数据。

请参阅 https://msdn.microsoft.com/en-us/library/ms176122.aspx

Something like 

SELECT * FROM table WHERE Type & 0x0001000 > 0 

您可能需要尝试使用常量AND(0x0001000)。但这是说 - 给我所有记录,其中右边的第四位是1.(0x前缀表示二进制表示)