sql >> Database >  >> RDS >> Sqlserver

Ampersand-operator (&) in een SQL Server WHERE-clausule

&is de bitsgewijze logische en operator - Het voert de bewerking uit op 2 gehele waarden.

WHERE (sc.Attributes & 1) = 0 

De bovenstaande code controleert of sc.Attributes een even getal is. Dat is hetzelfde als zeggen dat het eerste bit niet is ingesteld.

Vanwege de naam van de kolom:"Attributen", dan is de waarde "1" waarschijnlijk slechts een vlag met een externe betekenis.

Het is gebruikelijk om 1 binair cijfer te gebruiken voor elke vlag die is opgeslagen in een nummer voor attributen. Dus om te testen voor het eerste bit gebruik je sc.Attributes&1, om te testen voor het tweede gebruik je sc.Attributes&2, om te testen voor het derde gebruik je sc.Attributes&4, om te testen voor het vierde gebruik je sc.Attributes&8, ...

Het =0-gedeelte test om te zien of het eerste bit NIET is ingesteld.

Enkele binaire voorbeelden:(==om het resultaat van de bewerking te tonen)

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


  1. Oracle Regexp om \n,\r en \t te vervangen door spatie

  2. Zoek uit of een object een tabelwaarde-functie is in SQL Server met OBJECTPROPERTY()

  3. MySQL DROP FOREIGN KEY Beperking

  4. Best practices:.NET:Hoe kan ik PK retourneren tegen een Oracle-database?