Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Operatore commerciale (&) in una clausola WHERE di SQL Server

&è l'operatore logico e bit per bit:esegue l'operazione su 2 valori interi.

WHERE (sc.Attributes & 1) = 0 

Il codice precedente verifica se sc.Attributes è un numero pari. Che equivale a dire che il primo bit non è impostato.

Tuttavia, a causa del nome della colonna:"Attributi", il valore "1" è probabilmente solo un flag che ha un significato esterno.

È comune utilizzare 1 cifra binaria per ogni flag memorizzato in un numero per gli attributi. Quindi per testare il primo bit usi sc.Attributes&1, per testare il secondo usi sc.Attributes&2, per testare il terzo usi sc.Attributes&4, per testare il quarto usi sc.Attributes&8, ...

La parte =0 sta verificando se il primo bit NON è impostato.

Alcuni esempi binari:(==per mostrare il risultato dell'operazione)

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