2010-07-23 8 views
2

J'essaie de déchiffrer certaines instructions SQL à l'aide de SQL Profiler, qui sont exécutées à partir d'une application propriétaire.Utilisation de 0x800 dans SQL WHERE Clause

L'une des déclarations est:

SELECT ID, Groups, Name, Gallery FROM DashboardReports WHERE (Groups & 0x800) <> 0 AND Root = 1 ORDER BY Name 

Quelqu'un peut-il expliquer comment la clause WHERE fonctionne? Je ne l'ai jamais vu une clause WHERE comme ça avant et la colonne « Groupes » contient des valeurs entières telles que 2048,2176,150 ET 414.

Merci Danny

Répondre

2

Ceci est une opération au niveau du bit - http://en.wikipedia.org/wiki/Bitwise_operation

0x800 en hexadécimal est 2048, il serait donc le même que l'écriture (Groupes & 2048) <> 0

Cette clause where dit la requête pour filtrer tous les enregistrements qui ont le 12 bit dans la colonne Groupes désactivée . 2048 signifie que le 12ème bit est activé (cela a plus de sens lorsque vous regardez le nombre comme une valeur binaire). C'est un moyen pratique de stocker plusieurs valeurs on/off dans une seule colonne. 150 est une combinaison de bits (128 et 32) ces deux évaluerait aussi vrai:

(Groups & 128) <> 0 
(Groups & 32) <> 0 

Voici une liste rapide des bits et leurs valeurs pour vous:

1 1 
2 2 
3 4 
4 8 
5 16 
6 32 
7 64 
8 128 
9 256 
10 512 
11 1024 
12 2048 

Cet article peut aider - http://www.codeproject.com/KB/cpp/bitbashing.aspx

+0

Merci pour votre réponse et les liens utiles! Danny – Danny