gpt4 book ai didi

sql - 如何在 SQL 中使用按位运算符对 int 进行翻转?

转载 作者:行者123 更新时间:2023-12-03 02:59:44 25 4
gpt4 key购买 nike

我在 sql 中有一个标志列,它是一个 int。

我需要使用 SQL 语句在标志中设置一些位。相应的 C++ 语句类似于 flags &= ~(unsigned long) (0x10000000)

我尝试过

update [Databases]
set flags = flags & ~0x10000000

但是我得到了

Operand data type varbinary is invalid for '~' operator.

然后我尝试看看转换函数会产生什么结果

select flagInt = CONVERT(int , 0x10000000)

给我 268435456。

select flagIntInvert = ~CONVERT(int , 0x10000000)

给我-268435457

与有符号整型相同

flag    268435456   int
~flag -268435457 int

但是我需要未签名的版本

(uint32)flag    268435456   unsigned long
~(uint32)flag 4026531839 unsigned long

有没有办法将标志设置为0x10000000的反转

谢谢。

最佳答案

可以使用设置标志的反转,但应用按位 NOT 运算符 ~。SQL Server 中的 int 是有符号 int。

据我所知,您希望在整数中激活一点,这可以使用以下语句来完成。

假设您有一个值为 1 的整数,即第一位处于事件状态。

DECLARE @Value int = 1;

并且您想要激活使用或运算符 (|) 的第三位,如下所示:

SET @Value = @Value | 4;

这将呈现 int 变量的值 5。

SELECT @Value;

如果您想检查第三位是否已设置,请使用以下命令,这将过滤所有其他事件位:

SELECT @Value & 4

如果您想在比较中使用它,请使用以下语句:

IF @Value & 4 = 4 ...

希望这有帮助。

关于sql - 如何在 SQL 中使用按位运算符对 int 进行翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049367/

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