如何使用按位运算符为SQL中的int翻转一下?

时间:2014-04-13 22:42:57

标签: sql sql-server tsql bit-manipulation bitwise-operators

我在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

与signed int

相同
flag    268435456   int
        ~flag   -268435457  int

但是我需要未签名的版本

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

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

感谢。

1 个答案:

答案 0 :(得分:4)

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

从我所看到的你想要在整数中激活一下,可以使用以下语句来完成。

假设您有一个值为1的整数,即第一位有效。

DECLARE @Value int = 1;

并且您希望激活使用or-operator(|)的第三位,如下所示:

SET @Value = @Value | 4;

这将呈现int变量的值5。

SELECT @Value;

如果您想检查第三位是否设置为使用以下内容,将过滤掉所有其他有效位:

SELECT @Value & 4

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

IF @Value & 4 = 4 ...

希望这有帮助。