求二键的总和的幂(二的倍数幂)

find power of two key in sum( multiple power of twos)

提问人:Joe Platano 提问时间:12/8/2022 最后编辑:Joe Platano 更新时间:12/8/2022 访问量:108

问:

对于一个 ~ 18 岁的应用程序,用户提交“案例”,每个案例在“日志”表中创建一行,这是一个数据库(在 SQL 2000 上)。这种情况可以用“描述符”进行标记,其中设置了 50 的硬编码限制。描述符/标签存储在查找表中,描述符的键是两个序列 (2^n) 的幂数。

下表如下所示:

钥匙 描述符
1 D 1
2 E S
4 E R的
8 D 4
16 E-T的

有 50 行,这意味着最大的键是 562.949.953.421.312。每个案例最多可以有 8 个描述符,不幸的是,这些描述符存储在案例日志表的单个列中。它们的键存储为该情况下所有描述符的摘要。

  • 描述符为 D2 的案例在日志中有 2
  • 描述符 D2 和 D4 的案例有 10 个案例
  • 描述符 D1、D3 和 D5 的案例有 21

该杂志有 1 亿条记录。现在,这是多年来第一次要求通过描述符来分析期刊。 查询日志并获取一个描述符的结果的智能(数学)方法是什么?

编辑:回答@Squirrel的评论:

jkey的 jvalue 描述 符
1 S T 0
2 V 2 24
3 S V 3
4 V 4 12
5 V 5 6
SQL服务器 SQL-SERVER-2000

评论

0赞 Squirrel 12/8/2022
请显示此表中的一些示例以及所需的结果Journal
3赞 johndk 12/8/2022
描述符 D2 和 D4 的情况有 10?

答:

3赞 Martin Smith 12/8/2022 #1

您需要使用按位运算符

假设该列是bigint

where yourcolumn & 16 > 0

将找到匹配的 D5 例如

如果您尝试此查询大于适合有符号 32 位 int 的文本值,请确保顺便将它们强制转换为,因为它们将默认解释为数据类型,不能与按位运算符一起使用。BIGINTnumeric

WHERE yourcolumn & CAST(562949953421312 AS BIGINT) > 0

如果实际上是而不是yourcolumnnumericbigint