如何将多个值合并为一个

时间:2015-08-18 18:40:53

标签: sql sql-server math

我需要在单个SQL Server列中存储5个值,每个值范围为1-90。这些值不能重复。我虽然使用了2,4,8,16,32,64 ......系统,但你猜它会变得非常大,使用十进制我冒险计算错误。有没有方便的方法:

  1. 将5个值存储到一个列中,以避免表中包含90位列see my previous post here

  2. 快速查询数据库,例如返回编号为X和Y的所有记录

  3. 另一个选项是包含000001000011000等标志的字符串(90),但这样我必须使用子字符串进行查询,我担心它会在具有25.000条记录或更多记录的表格上变慢。

2 个答案:

答案 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)

我已经解决了保存逗号分隔的数字,然后在我的代码中我将这个字段拆分成一个数组并可以处理数据。数字不是用于数学运算,而是用作字符串。