我需要在单个SQL Server列中存储5个值,每个值范围为1-90。这些值不能重复。我虽然使用了2,4,8,16,32,64 ......系统,但你猜它会变得非常大,使用十进制我冒险计算错误。有没有方便的方法:
将5个值存储到一个列中,以避免表中包含90位列see my previous post here。
快速查询数据库,例如返回编号为X和Y的所有记录
另一个选项是包含000001000011000等标志的字符串(90),但这样我必须使用子字符串进行查询,我担心它会在具有25.000条记录或更多记录的表格上变慢。
答案 0 :(得分:0)
第一次请求:你说大多数都是有点。但如果不是全部那么你不能使用按位运算符。并且无法将其保存在单个字段中
在这种情况下,您需要一个附加表。
Row_id | fieldName | fieldValue
1 | name1 | value1
1 | name2 | value2
.
.
.
1 | name90 | value90
第二次请求:在aditional表上保存5个值非常简单快捷。只需在两个表上为row_id创建和索引。
第三次请求:这里你再说一次可以将它保存为位。但是使用字符串,这是一个坏主意。
你是对的,数字不足以容纳90位,这是因为一个数字只能容纳32或64位,具体取决于类型。
在这种情况下,您需要使用两个字段(64位)或三个字段(32位)来存储所有90个可能的标志。
再次容易做到并且非常快。
修改强>
要使用多个字段,您必须创建类别
想象一下,有16位被分成两个8位(0..256)
01234567 89ABCDEF
01010101 11111111
创建fieldUp和fieldDown
SAVE
FieldUp = 01234567
FieldUp = 1 + 4 + 16 + 64
FieldDown = 89ABCDEF
FieldDown = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128
然后用FLAGS [b1,b5,bA]选择一行
SELECT *
FROM TABLE
WHERE FieldUp & (4 + 32)
AND FieldDown & 8
答案 1 :(得分:0)
我已经解决了保存逗号分隔的数字,然后在我的代码中我将这个字段拆分成一个数组并可以处理数据。数字不是用于数学运算,而是用作字符串。