Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Operador E comercial (&) em uma cláusula WHERE do SQL Server


&é o operador lógico e bit a bit - Ele executa a operação em 2 valores inteiros.
WHERE (sc.Attributes & 1) = 0 

O código acima verifica se sc.Attributes é um número par. O que é o mesmo que dizer que o primeiro bit não está definido.

Por causa do nome da coluna:"Atributos", então o valor "1" é provavelmente apenas algum sinalizador que tem algum significado externo.

É comum usar 1 dígito binário para cada flag armazenado em um número para atributos. Então para testar o primeiro bit você usa sc.Attributes&1, para testar o segundo você usa sc.Attributes&2, para testar o terceiro você usa sc.Attributes&4, para testar o quarto você usa sc.Attributes&8, ...

A parte =0 está testando para ver se o primeiro bit NÃO está definido.

Alguns exemplos binários:(==para mostrar o resultado da operação)
//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