sql >> Base de Datos >  >> RDS >> Sqlserver

Operador ampersand (&) en una cláusula WHERE de SQL Server

&es el operador lógico y bit a bit:realiza la operación en 2 valores enteros.

WHERE (sc.Attributes & 1) = 0 

El código anterior verifica si sc.Attributes es un número par. Lo que es lo mismo que decir que el primer bit no está establecido.

Sin embargo, debido al nombre de la columna:"Atributos", entonces el valor "1" es probablemente solo una bandera que tiene algún significado externo.

Es común usar 1 dígito binario para cada indicador almacenado en un número de atributos. Entonces, para probar el primer bit, usa sc.Attributes&1, para probar el segundo, usa sc.Attributes&2, para probar el tercero, usa sc.Attributes&4, para probar el cuarto, usa sc.Attributes&8, ...

La parte =0 está probando para ver si el primer bit NO está configurado.

Algunos ejemplos binarios:(==para mostrar el resultado de la operación)

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