2011-07-15 3 views
2

Est-il possible d'utiliser efficacement les opérations au niveau du bit pour comparer deux valeurs où la deuxième valeur est un sur-ensemble du premier? Si j'ai les attributs 1, 2 et 3 sur ON, je dois faire correspondre cela à une valeur où les attributs 1 et 2 peuvent être ON ou OF et 3 doit être ON.Comparer les valeurs avec les opérations bit à bit

enum user_attribs { 
    attrib1 = 0, attrib2 = 1, attrib3 = 2 
} 

enum spt_attribs { 
    attrib1 = 0, attrib2 = 1, attrib3 = 2 
} 

user_attribs u1 = attrib1 & attrib2 & attrib3; 

spt_attribs s1 = attrib1 & attrib2 | attrib3; 

serait-u1 = s1 valable dans SQL avec le code ci-dessus?

MISE À JOUR: Le SGBDR est SQL SERVER 2008 R2. J'essaie de comparer les attributs stockés dans la base de données. J'aimerais pouvoir comparer avec succès la valeur d'un "profil utilisateur" à un "profil système", où le profil système est un sur-ensemble de celui de l'utilisateur, par ex. le profil de l'utilisateur doit correspondre au profil du système. Si les bits de l'utilisateur sont définis sur 1101, cela correspondrait au bit système 1101 ou 1001 ou 1100, etc. J'ai besoin que le profil système corresponde aux deux paramètres dans la clause "WHERE" de l'instruction SQL.

+0

ce qui signifie "comparer à la réussite de la valeur" signifie? –

Répondre

0

ce n'est pas quelque chose que vous pouvez faire avec SQL. Vous pourriez parler de TSQL ou PL/SQL. Quel RDBMS utilisez-vous?

+0

Cela aurait dû être fait comme un commentaire, pas une réponse ... – Joe

+0

pas vraiment, il a demandé s'il pouvait le faire en SQL et je lui ai répondu – jworrin

+2

@jworrin: Je pense que vous devez clarifier ce que * vous * entendez par ' SQL '. TSQL et PL/SQL implémentent tous deux le niveau d'entrée standard SQL-92. Cependant, la norme SQL-92 ne fournit pas de tels opérateurs par conception. Un exemple similaire est la fonction/opérateur 'mod': non fourni par les Standards mais tous les produits SQL en ont un. – onedaywhen

2

Vous ne l'avez pas dit votre SGBDR, mais SQL Server prend en charge les opérateurs binaires:

Et vous utiliseriez comme:

-- must be powers of 2... 
attrib1 = 1 
attrib2 = 2 
attrib3 = 4 
... 

-- Check if attrib1 and atrrib2 are set 
IF ((col1 & (atrib1 | attrib2)) = (atrib1 | attrib2) 

Oracle a BITAND:

MySQL a Bit Fonctions:

Questions connexes