sql - 如何撰写T-SQL WHERE语句,以确定特定的过滤器值是否为从列值可收集的2的幂

标签 sql sql-server algorithm

我得到了名为multitypes(int)的sql表和列。
多类型列值是常规数字。我需要将这些数字分解为2个收藏品的幂,然后检查过滤值是否是这些收藏品之一。
如何正确构建我的WHERE语句?
例子:
列具有值:

10 which is (8+2), 
25 which is (16+8+1), 
17 which is (16+1), 
101 which is (64+32+4+1)

我想建立查询
SELECT * FROM TABLE
WHERE @FilterValue -???-> MultiTypes

-是吗???->means-@filtervalue是迭代值的“2次幂”集合之一
如果filter value是8,我将得到多类型值为10和25的行
如果filter value为1,我将得到具有多类型值17、101和25的行

最佳答案

如果要知道筛选器值是否与“1”位置的位数组匹配,请使用按位和。看起来像:

where MultiType_Column & @filter = @filter

不需要将值分解为特定类型。
如果要知道是否设置了任何值,则可以使用:
where MultiType_Column & @filter <> 0

关于sql - 如何撰写T-SQL WHERE语句,以确定特定的过滤器值是否为从列值可收集的2的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739533/

相关文章:

sql - 你如何处理 postgresql 中的范围日期选择?

SQL查询组和有

json - 当没有行时,如何让 JSON 子查询返回空数组而不是 null

algorithm - 随机排列

javascript - Damerau-Levenshtein 距离实现

sql - 如何使用mysql查询通过评分获取用户? (评分最高)

PHP 从 PostgreSQL 查询中获取结果字符串

c# - 为什么我不能使用这段代码更新我的 SQL Server 表?

sql-server - 使用转义引号将 SQL 数据库批量导出为 CSV

python - `n` 何时匹配 `n^2` 的最后一位?