1

(注意:- 我在这里写的代码可能有语法错误)

我有一个有 2 个字段的表

创建表跟踪( TraceName VARCHAR(100)、BlockVector VARCHAR(MAX)、NumHits INT);

表中有大约 100 万个条目。

我想从该表中实现以下目标:

1) 对于每一行,对 BlockVector 列与另一个相同长度的 VARCHAR 进行按位异或,并将设置的位数存储在 NumHits 列中

2) 找到 NumHits 列的最大值。

为了在 T-SQL 中查找 XOR,我们可以使用 '^' 运算符。如何找到设置的位数。

任何帮助将不胜感激。

4

1 回答 1

1

以下函数可用于计算整数中设置的位数:

CREATE FUNCTION dbo.bit_count (@num AS BIGINT)RETURNS INT AS
BEGIN
    DECLARE @msb INT
    SET @msb = 0

    IF @num < 0
    BEGIN -- BIGINT is signed so treat the MSB differently
        SET @msb = 1
        SET @num = 0x7FFFFFFFFFFFFFFF & @num
    END

    SET @num = @num - ((@num / 2) & 0x5555555555555555)
    SET @num = (@num & 0x3333333333333333) + ((@num / 4) & 0x3333333333333333)
    SET @num = (@num + @num / 0x10) & 0x0F0F0F0F0F0F0F0F
    SET @num = @num + @num / 0x100
    SET @num = @num + @num / 0x10000
    SET @num = @num + @num / 0x100000000

    RETURN (@num & 0x3F) + @msb
END

注意:我没有写那个函数,也没有测试过。我在这里找到它: http ://www.dbforums.com/microsoft-sql-server/1630934-bit-counting.html#post6342950

于 2013-08-30T10:31:46.427 回答