我在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的反转?
感谢。
答案 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 ...
希望这有帮助。