首页 MsSql 汉明重量/人口数量在T-SQL中

汉明重量/人口数量在T-SQL中

我正在寻找一种快速计算BINARY(1024)字段的汉明重量/总体数/“1位数”的方法. MySQL有一个BIT_COUNT函数可以做类似的事情.我在T-SQL中找不到类似的功能? 或者您是否建议将二进制数据存储在另一种类型的字段中? 如果你不知道我在说什么,这里是Wikipedia arti

我正在寻找一种快速计算BINARY(1024)字段的汉明重量/总体数/“1位数”的方法. MySQL有一个BIT_COUNT函数可以做类似的事情.我在T-SQL中找不到类似的功能?

或者您是否建议将二进制数据存储在另一种类型的字段中?

如果你不知道我在说什么,这里是Wikipedia article about the hamming weight.

解决方法

您可以使用具有预先计算的汉明权重的辅助表来获取小数字(如字节),然后相应地拆分值,连接到辅助表并获得部分汉明权重的总和作为值的汉明权重:

-- define Hamming weight helper table
DECLARE @hwtally TABLE (byte tinyint,hw int);
INSERT INTO @hwtally (byte,hw) VALUES (0,0);
INSERT INTO @hwtally (byte,hw) SELECT   1 - byte,1 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT   3 - byte,2 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT   7 - byte,3 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT  15 - byte,4 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT  31 - byte,5 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT  63 - byte,6 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT 127 - byte,7 - hw FROM @hwtally;
INSERT INTO @hwtally (byte,hw) SELECT 255 - byte,8 - hw FROM @hwtally;

-- calculate
WITH split AS (
  SELECT SUBSTRING(@value,number,1) AS byte
  FROM master.dbo.spt_values
  WHERE type = 'P' AND number BETWEEN 1 AND LEN(@value)
)
SELECT
  Value = @value,HammingWeight = SUM(t.hw)
FROM split s
  INNER JOIN @hwtally t ON s.byte = t.byte

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/shujuku/mssql/20200708/5388.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部