Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Opérateur esperluette (&) dans une clause SQL Server WHERE

&est l'opérateur logique et bit à bit - Il effectue l'opération sur 2 valeurs entières.

WHERE (sc.Attributes & 1) = 0 

Le code ci-dessus vérifie si sc.Attributes est un nombre pair. Ce qui revient à dire que le premier bit n'est pas défini.

Cependant, à cause du nom de la colonne :"Attributs", la valeur "1" n'est probablement qu'un indicateur qui a une signification externe.

Il est courant d'utiliser 1 chiffre binaire pour chaque indicateur stocké dans un nombre pour les attributs. Donc, pour tester le premier bit, vous utilisez sc.Attributes&1, pour tester le second, vous utilisez sc.Attributes&2, pour tester le troisième, vous utilisez sc.Attributes&4, pour tester le quatrième, vous utilisez sc.Attributes&8, ...

La partie =0 teste pour voir si le premier bit n'est PAS défini.

Quelques exemples binaires :(==pour afficher le résultat de l'opération)

//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