Sql 如何在int列表上按位计算

Sql 如何在int列表上按位计算,sql,sql-server,tsql,Sql,Sql Server,Tsql,我尝试在SQL中进行逐位操作,以同时测试多个值 而不是在我的int列表上循环。我想知道是否有一种方法可以做到像在(包含) 但是,我不想执行in,因为它像contains一样检查,而是要检查int列表中的每一项,即按位操作 (ReferenceNumber & intItem) > 0 了解我需要的几个信息。 我有一个项目列表,每个项目代表一个值。(1、2、4、8、16等)。当我保存选中的项目时,它将保存为一个数字,该数字等于选中项目值的总和 我添加了一个过滤器来过滤具有相同项

我尝试在SQL中进行逐位操作,以同时测试多个值 而不是在我的int列表上循环。我想知道是否有一种方法可以做到像在(包含)

但是,我不想执行in,因为它像contains一样检查,而是要检查int列表中的每一项,即按位操作

(ReferenceNumber & intItem) > 0  
了解我需要的几个信息。 我有一个项目列表,每个项目代表一个值。(1、2、4、8、16等)。当我保存选中的项目时,它将保存为一个数字,该数字等于选中项目值的总和

我添加了一个过滤器来过滤具有相同项目的列表,我想做相反的操作。检查列表中选定的项目(在我的筛选器内)是否在与我之前选择的总和相等的数字内

这就是我使用位运算符的原因

有人已经在处理这个案子了?
提前谢谢

我想你想要
存在
。有点不清楚您到底在问什么,但我想您应该检查一下是否有任何位与
TabA.id
重叠:

select *
from TabA
where exists (select 1
              from @listOfIDs l
              where (TabA.ID & l.id) <> 0
             );
选择*
来自塔巴
存在的位置(选择1
来自@listOfIDs l
其中(TabA.ID和l.ID)0
);

您使用的是
SQL Server
还是
Oracle
?目前,我已删除了冲突的方言标记。请仅标记方言(及其各自的RDBMS)。某些数据库系统可能支持按位逻辑,但一般来说,在SQL中,应将单独的数据项存储为单独的数据项,而不是将它们编码为整数。@Squirrel-sqlserver@Damien_The_Unbeliever我尝试在sql中复制.net逐位实现,这就是我这样做的原因,但我当然可以改变它。我使用bitwise是因为它是一个旧的代码过程,暂时无法更改它。我添加了一些信息,是否更清楚?@MatDev8。修复您的数据模型。在SQL中,通常不建议使用位篡改来存储多个项。通常在这个数据库中,我们使用中间表,但在这个数据库中,它不是这样创建的。这里的问题是,如果我创建一个新表,我将需要对迁移进行逐位比较,因为这个数据库已经存在好几年了
select *
from TabA
where exists (select 1
              from @listOfIDs l
              where (TabA.ID & l.id) <> 0
             );