2008-10-04 14 views
56

Estoy intentando realizar un NOT bit a bit en SQL Server. Me gustaría hacer algo como esto:¿Cómo volteo un poco en SQL Server?

update foo 
set Sync = NOT @IsNew 

Nota: Empecé a escribir esto y encontré la respuesta a mi propia pregunta antes de que terminara. Todavía quería compartir con la comunidad, ya que esta documentación faltaba en MSDN (hasta que también la agregué al contenido de la comunidad).

+0

leí este mal que pienso ... iba a decir que no se puede hacer una Uturn en SQL Server ...: P Otra – Codewerks

+1

artículo: http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/how-to-flip-a-bit-in-sql-server-by-using –

Respuesta

21

NO bit a bit: ~

AND bit a bit: &

OR bit a bit: |

Bitwise XOR:^

7

¿Falta en MSDN? http://msdn.microsoft.com/en-us/library/ms173468(SQL.90).aspx

~: Realiza una operación NOT lógica bit a bit en un valor entero. El operador ~ bit a bit realiza una lógica NO bit a bit para la expresión, tomando cada bit por turno. Si la expresión tiene un valor de 0, los bits en el conjunto de resultados se establecen en 1; de lo contrario, el bit en el resultado se borra a un valor de 0. En otras palabras, unos se cambian a ceros y los ceros se cambian a unos.

+0

D'oh. Acabo de mirar bajo operadores bit a bit y ~ operadores unarios :) –

2

En aras de la exhaustividad:

SELECT b, 1 - b 
FROM 
    (SELECT cast(1 AS BIT) AS b 
    UNION ALL 
    SELECT cast(0 AS BIT) AS b) sampletable