MSSQL BIT_COUNT(汉明距离)

Jen*_*wka 6 mysql sql sql-server

有什么功能类似于BIT_COUNTMSSQL中的MYSQL 功能吗?我想在MSSQL中创建一个非常简单的汉明距离函数,我可以在我的选择中使用它.

这是我对MYSQL的看法:

CREATE FUNCTION `HAMMINGDISTANCE`(`hasha` BIGINT, `hashb` BIGINT)
    RETURNS int(11)
    DETERMINISTIC
    RETURN 
    BIT_COUNT(hasha^hashb)
Run Code Online (Sandbox Code Playgroud)

dcp*_*dcp 5

为什么不在T-SQL中编写自己的bit_count代码?如果您只需要计算bigint中的设置位数,则无需使用SQL CLR.这是一个例子:

CREATE FUNCTION bit_count
(
   @pX bigint
)
RETURNS int
AS
BEGIN
   DECLARE @lRet integer
   SET @lRet = 0
   WHILE (@pX != 0)
   BEGIN
      SET @lRet = @lRet + (@pX & 1)
      SET @pX = @pX / 2
   END   
   return @lRet   
END
GO
Run Code Online (Sandbox Code Playgroud)

此外,这是一个小提琴你可以尝试看到这个功能在行动.

请注意,此算法仅适用于非负bigints.如果您正在寻找适用于负bigint的算法,请参阅此链接.