Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Storing a number of power of 2 into INT field
Message
 
 
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Autre
Divers
Thread ID:
01651872
Message ID:
01651914
Vues:
53
>>>>>>>If I store a number of power of 2 into INT field, how many different "values" will this field hold? I am not sure I phrase my question correctly, so here is an example of what I am trying to say.
>>>>>>>Say I store 128 into a INT field. Which means that I can get 7 numbers: 2, 4, 8, 16, 32, 64, 128
>>>>>>>Since an INT field can hold up to 2,147,483,647, what is the max number can I get from this value?
>>>>>>
>>>>>>The maximum value in regards to that calculation would be 1,073,741,824. That would be 2^30. If you go higher, you will be one number over the maximum. I would suggest to switch the field to Big Integer if you have some concerns.
>>>>>
>>>>>This is about 1 billion. For what I am trying to do, this is more than enough. Thank you.
>>>>
>>>>
>>>>Still somewhat puzzled by your question ;-)
>>>>
>>>>One possible use for a int in power2 is in "combination mode" as array of bit fields most of us remember.
>>>>Yes, you can easily squeeze 30 flags into an INT, but why ? SQL server has the bit data type and will pack on byte sizes depending on the number of flag[s / columns] you need. Say you need 15 flags, SQL Server will only reserve 2 bytes. Small benefit size ways but NO DANGER if suddelny you need 33 flags....
>>>>
>>>>OTOH, if there the max value which is important after differing # of iterations, I'd save the exponents and work directly with them, perhaps with dedicated functions or SPs.
>>>>
>>>>Indexing on such fields probably problematic IAC. What am I missing ?
>>>>
>>>>Friday curios
>>>>
>>>>thomas
>>>
>>>I don't understand how the bit data type can serve me in this case (and this is just me). Let me describe what I am considering this field (INT) for (simplified example).
>>>Say, the program has 5 features: Feature 1, Feature 2, Feature 3, Feature 4, Feature 5. Each record is using none, or any number of features. So I will store in the INT field (in pseudo code) the following value:
>>>
>>>REPLACE MyFeatureField with iif( UsingFeature1, 1, 0) + iif( UsingFeature2, 2, 0) + iif( UsingFeature3, 4, 0) + ;
>>>  iif( UsingFeature4, 8, 0) + iif( UsingFeature5, 16, 0) 
>>>
>>>Then the code (using syntax " MyFeatureField & > 1 ") can check if the record is "flagged" for Feature1 or 2 or whatever. The number of "Features" is very large; hence I was asking the question.
>>>How would I apply your suggestion of a BIT type?
>>
>>Google hint:
>>sql server bit field type
>>Each Usingfeature? would be a separate bit column
>>
>>AFAIR before vfp9 Bit is the easiest field to map to vfp logical in cusor/view Remote Connections, but used vfp8 only a short time.
>>Portability to other backends is not really something you strive for, otherwise I'd either use smallest int with 1/0 logic (or empty() if you prefer) or the power trick you already use.
>
>I had a chance to get away from computer and clear my head. Now that I re-read your message I understand what you are suggesting. But in my case, since I need about 300 flags, I would have to create 300 bit columns. And I don't like this idea. I will consider other options. Thank you.

You could make a Character(30) field with each position representing a Feature. Then you can check the Feature with substr(Features,1,1) = "Y", Substr(Features,2,1) = "Y" etc.
Christian Isberner
Software Consultant
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform