sql - 按位查询倍数值
问题描述
我想在 SQL Server 中按位执行查询。
我有一个包含所有组合值的事件表。
如果星期一是 (2^0) 1,而星期日是 (2^6) 64,我想要星期一、星期三和星期日的所有记录,我写这个查询:
SELECT Distinct(DayBitwise)
FROM Assets
WHERE DayBitwise | 1 | 4 | 64 = 1 | 4 | 64
ORDER BY DayBitwise
预期结果:
1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 15, 17, 19, 20, 21, 23, 25, 27, 28, 29, 31 ....
实际结果:1,4 ,5, 64, 65, 68
谢谢。
解决方案
由于您有兴趣检查是否设置了任何星期一、星期三或星期日位,因此您需要使用 AND 掩码并且结果非零:
WITH assets(DayBitwise) AS (
SELECT number
FROM master..spt_values
WHERE type = 'p' AND number BETWEEN 0 AND 127
)
SELECT *
FROM assets
WHERE DayBitwise & (1 | 4 | 64) <> 0
推荐阅读
- ios - Flutter:未连接到 Android Studio 中的 IOS 模拟器
- c++ - 数组变量是 C++ 中的引用吗?
- asp.net - Web API 在控制器上未找到任何操作
- c++ - 修改 Makefile 以添加 GSL 库
- javascript - TypeError:无法读取未定义的属性“地图”(Google 地图放置自动完成 Angular 2)
- c++ - 函数无法解析
- angular - 按顺序发出 observables,直到第一次返回错误
- tensorflow - 不确定函数是否会破坏反向传播
- django - django rest框架DefaultRouter错误
- node.js - 没有参数的Nodejs模块