Frage

Der Versuch, eine einzelne booleschen NOT-Operation durchzuführen, scheint es, dass unter MS SQL Server 2005, der folgende Block funktioniert nicht

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = NOT @MyBoolean;
SELECT @MyBoolean;

Stattdessen bin ich immer erfolgreicher mit

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = 1 - @MyBoolean;
SELECT @MyBoolean;

Doch, das sieht ein bisschen eine verdrehte Art und Weise etwas so einfaches wie eine Verneinung auszudrücken.

Bin ich etwas fehlt?

War es hilfreich?

Lösung

Mit dem Operator ~:

DECLARE @MyBoolean bit
SET @MyBoolean = 0
SET @MyBoolean = ~@MyBoolean
SELECT @MyBoolean

Andere Tipps

Ihre Lösung ist gut ... Sie auch diese Syntax verwenden können, ein wenig in SQL zu wechseln ...

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = @MyBoolean ^ 1; 
SELECT @MyBoolean;

Das Subtrahieren der Wert von 1 sieht aus wie es den Trick tun wird, aber in Bezug auf die Absicht zum Ausdruck Ich glaube, ich würde es vorziehen, mit zu gehen:

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

Es ist ausführlicher, aber ich denke, es ist ein wenig leichter zu verstehen.

In SQL 2005 gibt es keine wirklichen Booleschen Wert, der Bit-Wert ist etwas anderes wirklich.

Ein Bit kann drei Zustände haben, 1, 0 und null (weil es Daten ist). SQL nicht automatisch diese wahr oder falsch konvertieren (obwohl, zum Verwechseln SQL Enterprise Manager wird)

Der beste Weg von Bitfeldern zu denken, in der Logik als eine ganze Zahl ist, die ist 1 oder 0.

Wenn Sie Logik direkt auf einem Bit-Feld verwenden, wird es wie jedes andere Wertvariable verhalten - d. H die Logik wahr ist, wenn es einen Wert (beliebiger Wert) hat und ansonsten false

einen invertierten Bit zuzuweisen, müssen Sie die bitweise NOT-Operator verwenden. Wenn das bitweise NOT-Operator, ‚~‘, müssen Sie Ihre Spalte oder Variablen stellen Sie sicher, als Bit deklariert wird.

Dies wird nicht geben Sie Null:

Select ~1 

Dies wird:

select ~convert(bit, 1)

So wird dies:

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

BIT ist ein numerischer Datentyp, nicht boolean. Deshalb sollten Sie nicht Boolesche Operatoren, um es anwenden können.
SQL Server nicht BOOLEAN Datentyp (nicht sicher, über SQL Server 2008), so haben Sie mit so etwas wie @ Matt Hamilton-Lösung bleiben.

Mit ABS den absoluten Wert erhalten (-1 wird 1) ...

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top