88 votes

Comment inverser un bit dans SQL Server ?

J'essaie d'effectuer un NOT par bit dans le serveur SQL. J'aimerais faire quelque chose comme ceci :

update foo
set Sync = NOT @IsNew

Note : J'ai commencé à écrire ce texte et j'ai découvert la réponse à ma propre question avant d'avoir terminé. J'ai quand même voulu partager avec la communauté, puisque cet élément de documentation manquait sur MSDN (jusqu'à ce que je l'ajoute au contenu communautaire, là aussi).

0 votes

J'ai mal lu, je crois... j'allais vous dire qu'on ne peut pas faire un Uturn dans SQL Server...:P

1 votes

129voto

Jason Kresowaty Points 8053

Oui, l'opérateur ~ fonctionnera.

update foo
set Sync = ~@IsNew

34voto

Even Mien Points 10122

Bitwise NOT : ~

ET par bit : &

Bitwise OR : |

XOR par bit : ^

12voto

Blorgbeard Points 38991

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

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

0 votes

D'oh. J'ai juste regardé sous les opérateurs binaires et ~ opérateurs unaires :)

2voto

vitik Points 11

L'opérateur ~ ne travaillera qu'avec le TBI,

essayez : ~ CAST(@IsNew AS BIT)

2voto

Oliver Points 1790

Dans un 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X