尝试执行单个布尔NOT操作,似乎在MS SQL Server 2005下,以下块不起作用
DECLARE @MyBoolean bit; SET @MyBoolean = 0; SET @MyBoolean = NOT @MyBoolean; SELECT @MyBoolean;
相反,我越来越成功了
DECLARE @MyBoolean bit; SET @MyBoolean = 0; SET @MyBoolean = 1 - @MyBoolean; SELECT @MyBoolean;
然而,这似乎是一种扭曲的方式来表达像否定一样简单的东西.
我错过了什么吗?
使用〜运算符:
DECLARE @MyBoolean bit SET @MyBoolean = 0 SET @MyBoolean = ~@MyBoolean SELECT @MyBoolean
您的解决方案很好...您也可以使用此语法在SQL中进行切换...
DECLARE @MyBoolean bit; SET @MyBoolean = 0; SET @MyBoolean = @MyBoolean ^ 1; SELECT @MyBoolean;
从1中减去这个值看起来就好了,但就表达意图而言,我认为我更愿意选择:
SET @MyBoolean = CASE @MyBoolean WHEN 0 THEN 1 ELSE 0 END
它更冗长,但我认为它更容易理解.
要分配反转位,您需要使用按位NOT运算符.使用按位NOT运算符'〜'时,必须确保将列或变量声明为位.
这不会给你零:
Select ~1
这将:
select ~convert(bit, 1)
这样:
declare @t bit set @t=1 select ~@t
在SQL 2005中没有真正的布尔值,位值实际上是其他东西.
一个位可以有三个状态,1,0和null(因为它是数据).SQL不会自动将这些转换为true或false(尽管,令人困惑的SQL企业管理器会)
考虑逻辑中的位字段的最佳方法是1或0的整数.
如果直接在位字段上使用逻辑,它将表现得像任何其他值变量 - 即如果逻辑有值(任何值)则逻辑为真,否则为false.
BIT是数字数据类型,而不是布尔值。这就是为什么您不能对其应用布尔运算符的原因。
SQL Server没有BOOLEAN数据类型(不确定SQL SERVER 2008),因此您必须坚持使用@Matt Hamilton解决方案。