2008-10-04 8 views
56

J'essaie d'effectuer un NON bit à bit dans SQL Server. Je voudrais faire quelque chose comme ceci:Comment retourner un bit dans SQL Server?

update foo 
set Sync = NOT @IsNew 

Note: Je commencé à écrire cela et trouvé la réponse à ma propre question avant que je finisse. Je voulais toujours partager avec la communauté, car cette documentation manquait sur MSDN (jusqu'à ce que je l'ajoute au contenu de la communauté là aussi).

+0

Je lis ce mal, je pense que ... ça allait vous dire que vous ne pouvez pas faire un Uturn dans SQL Server ...: P – Codewerks

+1

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

Répondre

21

Bitwise PAS: ~

Bitwise ET: &

Bitwise OU: |

Bitwise XOR:^

7

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

~: Effectue un NON logique opération sur une valeur entière. L'opérateur ~ bitwise effectue un NOT logique pour l'expression, en prenant chaque bit à son tour. Si l'expression a la valeur 0, les bits du jeu de résultats sont mis à 1; sinon, le bit dans le résultat est effacé à une valeur de 0. En d'autres termes, les uns sont remplacés par des zéros et les zéros sont remplacés par des zéros.

+0

D'oh. Je viens de regarder sous les opérateurs bitwise et ~ opérateurs unaires :) –

2

Par souci d'exhaustivité:

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