gpt4 book ai didi

sql-server - SQL Server 中的按位运算

转载 作者:行者123 更新时间:2023-12-03 23:28:04 25 4
gpt4 key购买 nike

我有一列 CategoryId 将在当时存储多个值,其中一些有 1 (BA)、2 (SA) 或 3(两者)。我不确定这是否是正确的方法。

例如,查询关闭所有记录,因为 3 包括 1 和 2。如果我想要具有 的行两者 类别然后按位不起作用。我相信我混淆了术语。

示例数据和查询:

CREATE TABLE #Payment (Id INT, Name NVARCHAR(50), CategoryId INT)

INSERT #Payment (Id, Name, CategoryId) VALUES(1, N'A', 1) --BA
INSERT #Payment (Id, Name, CategoryId) VALUES(1, N'B', 2) --SA
INSERT #Payment (Id, Name, CategoryId) VALUES(1, N'C', 3) --BA and SA
INSERT #Payment (Id, Name, CategoryId) VALUES(1, N'D', 2) --SA

DECLARE @Value INT = 3

SELECT *
FROM #Payment
WHERE (CategoryId & @Value) = CategoryId

最佳答案

WHERE 子句中需要进行细微的更正。它应该是:

WHERE (CategoryID & 3) =  3          -- bits 1 and 2 are set (matches 3, 7, 11, 15, ...)

为了完整起见,这里是其他变体:
WHERE (CategoryID & 3) <> 0          -- bits 1 or  2 are set (matches 1, 2, 3, 5, 6, 7, 9, 10, 11, ...)
WHERE (CategoryID & 3) = 0 -- bits 1 and 2 are not set (matches 0, 4, 8, 12, ...)
WHERE (CategoryID & 3) = CategoryID -- bits other than 1 and 2 are not set (matches 0, 1, 2, 3)

关于sql-server - SQL Server 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com