Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Der kaufmännische Und-Operator (&) in einer WHERE-Klausel von SQL Server

&ist der bitweise logische and-Operator - Er führt die Operation mit 2 ganzzahligen Werten aus.

WHERE (sc.Attributes & 1) = 0 

Der obige Code prüft, ob sc.Attributes eine gerade Zahl ist. Das ist dasselbe wie zu sagen, dass das erste Bit nicht gesetzt ist.

Aufgrund des Namens der Spalte jedoch:"Attributes", ist der Wert "1" wahrscheinlich nur ein Flag, das eine externe Bedeutung hat.

Es ist üblich, 1 Binärziffer für jedes Flag zu verwenden, das in einer Zahl für Attribute gespeichert ist. Um das erste Bit zu testen, verwenden Sie sc.Attributes&1, um das zweite zu testen, verwenden Sie sc.Attributes&2, um das dritte zu testen, verwenden Sie sc.Attributes&4, um das vierte zu testen, verwenden Sie sc.Attributes&8, ...

Der =0-Teil testet, ob das erste Bit NICHT gesetzt ist.

Einige binäre Beispiele:(==um das Ergebnis der Operation anzuzeigen)

//Check if the first bit is set, same as sc.Attributes&1
11111111 & 00000001 == 1
11111110 & 00000001 == 0
00000001 & 00000001 == 1


//Check if the third bit is set, same as sc.Attributes&4
11111111 & 00000100 == 1
11111011 & 00000100 == 0
00000100 & 00000100 == 1