sql >> Databáze >  >> RDS >> Sqlserver

Hammingova váha/počet obyvatel v T-SQL

Můžete použít pomocnou tabulku s předem vypočítanými Hammingovými vahami pro malá čísla, jako jsou bajty, pak hodnotu odpovídajícím způsobem rozdělit, připojit se k pomocné tabulce a získat součet dílčích Hammingových vah jako Hammingovu váhu hodnoty:

-- 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


  1. Udržování uživatele přihlášeného pomocí nodeJS

  2. MariaDB LCASE() Vysvětleno

  3. jak načíst data v JSP uvnitř tabulky na základě rozevíracího výběru

  4. špatný argument č. 1 k 'ipairs' (tabulka očekávána, má boolean)