说你有一长列文字是1或0,有点像一个bitvector,但在一个数据库列。你会如何查询知道什么值设定/没有设置?说你需要知道如果char500和char1500是"真实"或没有。

有帮助吗?

解决方案

SELECT
  Id
FROM
  BitVectorTable
WHERE
  SUBSTRING(BitVector, 500, 1) = '1'
  AND SUBSTRING(BitVector, 1000, 1) = '1'

没有索引可以使用这种类型的查询,虽然。当你有很多行,这将得到缓慢的速度非常快。

编辑:就SQL服务器至少,所有内置串职能 的确定性.这意味着你可以看看能否使用计算的列基于SUBSTRING()的结果为整个组合的价值, 把索引他们每个人.插入将缓慢,表格的尺寸将增加,但是搜索将很快。

SELECT
  Id
FROM
  BitVectorTable
WHERE
  BitVector_0500 = '1'
  AND BitVector_1000 = '1'

编辑#2:的 限制SQL服务器 有:

  • 1024个列每正常表
  • 30.000的列每个"广泛"的表
scroll top