J'ai une énumite bitwise avec FlagsAttribute Ensemble sur elle comme ceci -
[FlagsAttribute] public enum MyEnum { None = 0, First = 1, Second = 2, Third = 4, Five = 8, Six = 16, Seven = 32, Eight = 64, Nine = 128 }
4 Réponses :
Vous pouvez faire Opérations Bitwise dans SQL
Select Case when (MyEnum & 1) = 1 Then 1 else 0 End as First, Case when (MyEnum & 2) = 2 Then 1 else 0 End as Second, Case when (MyEnum & 4) = 4 Then 1 else 0 End as Third, Case when (MyEnum & 8) = 8 Then 1 else 0 End as Fourth, Case when (MyEnum & 16) = 16 Then 1 else 0 End as Fifth From MyTable
En fait, ma question était que je ne suis pas au courant de la combinaison. Je n'ai que de valeur que de dire 11 en cela, je veux y avoir une association à partir de 1 + 2 + 8. Si j'avais la valeur 133, j'ai besoin d'obtenir la valeur '128 + 4 + 1'.
Ce sera vraiment utile, si vous pouvez me donner un petit exemple.
Est-ce ce que tu veux dire? c'est-à-dire que les drapeaux sont définis?
Cela peut aider à vous aider à démarrer: où Ceci reviendra des valeurs non nulles Pour chaque valeur définie (c.-à-d. 11 code> est votre valeur stockée. p>
SELECT 11 & 1 en tant que 'First' code> Retours
1 code>,
Sélectionnez 11 et 2 comme "secondaire" code> renvoie 2 ,
Sélectionnez 11 et 4 comme «troisième» code> renvoie
0 code> et ainsi de suite. p> p>
Personnellement, j'aime cette approche pour sa mise en œuvre explicite
Oui, ça va me faire aller. Merci de votre réponse si rapide.
declare @MyEnum as Int set @MyEnum = 11 select case when ( @MyEnum & 1 ) = 1 then '1+' else '' end + case when ( @MyEnum & 2 ) = 2 then '2+' else '' end + case when ( @MyEnum & 4 ) = 4 then '4+' else '' end + case when ( @MyEnum & 8 ) = 8 then '8+' else '' end as Bitses The (possible) trailing plus is left as an exercise for the reader.
DECLARE @Names VARCHAR(8000) SELECT @Names = COALESCE(@Names + ', ', '') + STR(ID) FROM [Play].[dbo].[Enums] where (26 & ID)=ID Select @Names;
Pouvez-vous avoir une colonne VARCHAR, puis sauvegarder "1,2,8" à la place?
Non, je ne peux pas changer la dB. C'est déjà en phase de production.
SQL est censé être mal aux opérations bitwises; en supposant que cela préfère le faire dans la terre C #.
@jonathan: Quoi? SQL va bien dans les opérations bitwises.
@Joe - Mes sources (SQL Server Team) Dites "Pas aussi bien que vous le pensez," mais cela pourrait être l'une de ces choses marginales / frontières / micro-optimisation.
"Sources" étant des poteaux de blog MSDN de 1 ou 2 ans de retour.