Beim Versuch, eine einzelne boolesche NOT-Operation auszuführen, scheint der folgende Block unter MS SQL Server 2005 nicht zu funktionieren
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = NOT @MyBoolean;
SELECT @MyBoolean;
Stattdessen werde ich erfolgreicher mit
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = 1 - @MyBoolean;
SELECT @MyBoolean;
Dies scheint jedoch eine verdrehte Art zu sein, etwas so Einfaches wie eine Negation auszudrücken.
Vermisse ich etwas
sql
sql-server
tsql
boolean-operations
Joannes Vermorel
quelle
quelle
Antworten:
Verwenden Sie den Operator ~:
quelle
Ihre Lösung ist gut ... Sie können diese Syntax auch verwenden, um ein wenig in SQL umzuschalten ...
quelle
SET @MyBoolean = 1 - @MyBoolean
außer dass Bitmathematik anstelle von Ganzzahlmathematik verwendet wird. Obwohl dies angemessen ist und funktioniert, kann es für Leute, die Bitmathematik nicht verstehen, verwirrend sein. Mehr Infos hier . @ Jonas Lincolns Lösung ist besser.Das Subtrahieren des Werts von 1 scheint den Trick zu tun, aber in Bezug auf das Ausdrücken von Absichten denke ich, dass ich es vorziehen würde, Folgendes zu tun:
Es ist ausführlicher, aber ich denke, es ist etwas einfacher zu verstehen.
quelle
Um ein invertiertes Bit zuzuweisen, müssen Sie den bitweisen NOT-Operator verwenden. Wenn Sie den bitweisen NOT-Operator '~' verwenden, müssen Sie sicherstellen, dass Ihre Spalte oder Variable als Bit deklariert ist.
Dies gibt Ihnen keine Null:
Dieser Wille:
So wird dies:
quelle
In SQL 2005 gibt es keinen echten booleschen Wert, der Bitwert ist wirklich etwas anderes.
Ein Bit kann drei Zustände haben, 1, 0 und null (weil es Daten sind). SQL konvertiert diese nicht automatisch in true oder false (obwohl dies verwirrenderweise der SQL Enterprise Manager tut).
Bitfelder in der Logik lassen sich am besten als Ganzzahl 1 oder 0 betrachten.
Wenn Sie Logik direkt für ein Bitfeld verwenden, verhält sie sich wie jede andere Wertvariable - dh die Logik ist wahr, wenn sie einen Wert (einen beliebigen Wert) hat, und andernfalls falsch.
quelle
BIT ist ein numerischer Datentyp, kein Boolescher. Aus diesem Grund können Sie keine booleschen Operatoren darauf anwenden.
SQL Server hat keinen BOOLEAN-Datentyp (nicht sicher über SQL SERVER 2008), daher müssen Sie sich an die Lösung von @Matt Hamilton halten.
quelle
Verwenden Sie
ABS
, um den absoluten Wert zu erhalten (-1 wird 1) ...quelle
-1
überhaupt etwas entstehen würde. Das heißt: Es wird nicht, wenn die Subtraktion in der logischeren / intuitiveren Form ausgedrückt wird, die das OP verwendet hat. Dies ist eine sinnlose kryptische und umfassende Möglichkeit, dies zu tun.