質問

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

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

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

ビットには、1、0、nullの3つの状態があります(データのため)。 SQLはこれらをtrueまたはfalseに自動的に変換しません(ただし、SQLエンタープライズマネージャーは混乱を招きます)

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

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

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

これではゼロは得られません:

Select ~1 

これは:

select ~convert(bit, 1)

これも:

declare @t bit
set @t=1
select ~@t

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

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

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top