84

単一のブール演算の 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;

とはいえ、これは否定のような単純なものを表現するには、少しねじれた方法に見えます。

何か不足していますか?

4

7 に答える 7

155

~ 演算子を使用します。

DECLARE @MyBoolean bit
SET @MyBoolean = 0
SET @MyBoolean = ~@MyBoolean
SELECT @MyBoolean
于 2008-10-07T10:37:58.663 に答える
25

あなたのソリューションは良いものです...この構文を使用して、SQLで少し切り替えることもできます...

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = @MyBoolean ^ 1; 
SELECT @MyBoolean;
于 2008-10-07T09:39:38.453 に答える
22

1から値を引くとうまくいくように見えますが、意図を表現するという点では、次のようにすることをお勧めします。

SET @MyBoolean = CASE @MyBoolean WHEN 0 THEN 1 ELSE 0 END

より冗長ですが、少し理解しやすいと思います。

于 2008-10-07T09:42:36.887 に答える
13

反転ビットを割り当てるには、ビットごとの NOT 演算子を使用する必要があります。ビットごとの NOT 演算子 '~' を使用する場合、列または変数がビットとして宣言されていることを確認する必要があります。

これはあなたにゼロを与えません:

Select ~1 

この意志:

select ~convert(bit, 1)

これもそうです:

declare @t bit
set @t=1
select ~@t
于 2012-04-24T14:24:00.157 に答える
10

SQL 2005 には実際のブール値はありません。ビット値は実際には別のものです。

ビットには、1、0、およびヌルの 3 つの状態があります (データであるため)。SQL はこれらを true または false に自動的に変換しません (ただし、紛らわしいことに SQL エンタープライズ マネージャーは変換します)。

ロジックでビット フィールドを考える最良の方法は、1 または 0 の整数として考えることです。

ビット フィールドでロジックを直接使用すると、他の値変数と同じように動作します。つまり、値 (任意の値) がある場合、ロジックは true になり、それ以外の場合は false になります。

于 2008-10-07T10:54:15.930 に答える
5

BIT はブール値ではなく数値データ型です。そのため、ブール演算子を適用できません。
SQL Server には BOOLEAN データ型がないため (SQL SERVER 2008 については不明)、@Matt Hamilton のソリューションのようなものに固執する必要があります。

于 2008-10-07T09:42:24.593 に答える
4

絶対値を取得するために使用ABSします(-1は1になります)...

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)
于 2010-08-24T16:46:05.560 に答える