首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何组合the语句以确定特定的筛选值是否是从列值中收集的2倍的幂

如何组合the语句以确定特定的筛选值是否是从列值中收集的2倍的幂
EN

Stack Overflow用户
提问于 2019-08-31 15:54:18
回答 4查看 115关注 0票数 2

我得到了名为MultiTypes (int)的SQL和列。MultiyTypes列值是正则数字。我需要将这些数字分解成2种收藏品的功率,然后检查过滤值是否是这些收藏品中的一种。

如何正确构造我的WHERE语句?

示例:列具有值:

代码语言:javascript
运行
复制
10 which is (8+2), 
25 which is (16+8+1), 
17 which is (16+1), 
101 which is (64+32+4+1)

我想要构建查询

代码语言:javascript
运行
复制
SELECT * FROM TABLE
WHERE @FilterValue -???-> MultiTypes

-?--意思是- @FilterValue是迭代值的“power of -2”收藏品之一。

如果筛选值为8,我将得到MultiTypes值为10和25的行(如果筛选值为1时),则将得到MultiTypes值为17、101和25的行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-31 16:33:37

如果您想知道筛选值是否与"1“位置中的位数组匹配,则使用位-和。看上去:

代码语言:javascript
运行
复制
where MultiType_Column & @filter = @filter

不需要将值分解为特定类型。

如果您想知道是否设置了任何值,则可以使用:

代码语言:javascript
运行
复制
where MultiType_Column & @filter <> 0
票数 2
EN

Stack Overflow用户

发布于 2019-08-31 16:09:13

如果要基于type(k) (2^k)进行筛选,可以使用&运算符:

代码语言:javascript
运行
复制
SELECT * 
FROM table_name
WHERE (MultiyType_Column & (POWER(2,k)) <> 0

上面的查询将获取所有具有type(k)的行。例如,如果是k=3,要获取所有具有type3的行,可以执行以下操作:

代码语言:javascript
运行
复制
SELECT * 
FROM table_name
WHERE (MultiyType_Column & (POWER(2,3)) <> 0
票数 0
EN

Stack Overflow用户

发布于 2019-08-31 16:15:27

通常,要测试MultiTypes是否匹配类型组合,例如Type2 + Type4我们做的,伪代码:

代码语言:javascript
运行
复制
(MultiTypes <bit AND> (Type2 <bit OR> Type4)) == (Type2 <bit OR> Type4)

<bit AND><bit OR>是特定于sql产品的,请查看产品手册。

Sql-server演示

代码语言:javascript
运行
复制
declare @multitype int = 128 + 16 + 1;
declare @test int = 128 + 1;
declare @test2 int = 64 + 1;

select 'Yes, @multitype includes all types of @test' res
where @multitype & @test = @test;


select 'this will not return any row' res2
where @multitype & @test2 = @test2;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57739533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档