因此应用程序具有带有位标记的复选框。根据选择的复选框选项,应用程序会将其作为整数存储在数据库中。如何查询数据库中的 int 以检查特定位是否打开/关闭。
示例:
Decimal Binary
16 00010000
208 11010000
我想检查第五位是否打开或关闭(或任何与此相关的位)。
SQL Server 没有位移运算符,但类似这样的操作可以:
where decimal & power(2,5-1) > 0
当然,使用位图会引发一个问题:为什么不只使用一组位标志呢?您可以单独定义每一个,并且代码更容易阅读。
您可以在 SQL 中通过乘或除 2 来定义位移运算符
可以在此处找到执行此操作的存储过程示例: http://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/
似乎对我有用的方法是......
DECLARE @Unknown AS int = 0;
DECLARE @Orange AS int = 1;
DECLARE @Big AS int = 2;
DECLARE @Green AS int = 4;
DECLARE @Small AS int = 8;
DECLARE @MYTABLE TABLE (
id INT,
name VARCHAR(50),
description INT
);
INSERT INTO @MYTABLE (id, name, description) VALUES (1, 'item one', @Big + @Orange);
INSERT INTO @MYTABLE (id, name, description) VALUES (2, 'item two', @Small + @Orange);
INSERT INTO @MYTABLE (id, name, description) VALUES (3, 'item three', @Small + @Green);
INSERT INTO @MYTABLE (id, name, description) VALUES (4, 'item four', @Unknown + @Green);
SELECT TOP 1
(SELECT COUNT(*) FROM @MYTABLE WHERE (SELECT CASE description & @Small WHEN @Small THEN 1 WHEN 0 THEN 0 END) = 1) AS 'Small Items',
(SELECT COUNT(*) FROM @MYTABLE WHERE (SELECT CASE description & @Big WHEN @Big THEN 1 WHEN 0 THEN 0 END) = 1) AS 'Big Items'
DELETE @MYTABLE