2009-07-10 10 views
16

Ho un campo int bitmasked nel mio database. Di solito riesco attraverso codice C#, ma ora ho bisogno di capovolgere un po 'nella maschera utilizzando T-SQLOperazioni di bit-lanciando in T-SQL

Come faccio a realizzare i seguenti:

Il bit che voglio capovolgere: 1 < < 8 (256)

Il valore maschera prima I flip: 143

Il valore della maschera dopo I flip: 399

Questo può essere fatto senza gli operatori di bit che mancano in T-SQL, giusto?

risposta

25

Uso XOR:

SELECT value^256 

Quindi nel tuo caso, SELECT 143^256 sarà infatti tornare 399. Se si desidera passare l'esponente così:

SELECT value^POWER(2, power) 
+0

grazie! Ha risolto il mio problema! C'è anche un modo per accendere il bit in modo elegante? (l'ho già fatto, ma sembra brutto ...) –

+2

Stai cercando di capovolgere o accendere? Flip - usa XOR (^); accendi - usa OR (|). Se vuoi più eleganza, avvolgi in una funzione definita dall'utente tersely. :) –

20

operatori tsql bit per bit possono essere trovati here e buon articolo su come usarli è here

+1

La domanda riguarda lo spostamento di bit, gli articoli che hai postato non hanno nulla a che fare con quello – Edwin

+3

La domanda riguarda il bit-FLIPPING, non sul cambio di bit. –

+0

Il titolo ha a che fare con lo spostamento dei bit, ma la vera domanda sul bit flipping. – DaveBoltman