Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Waga Hamminga/liczba populacji w T-SQL

Możesz użyć tabeli pomocniczej ze wstępnie obliczonymi wagami Hamminga dla małych liczb, takich jak bajty, a następnie odpowiednio podzielić wartość, dołączyć do tabeli pomocniczej i uzyskać sumę częściowych wag Hamminga jako wagę Hamminga wartości:

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Debugowanie nie pokazuje aktualnej wersji procedury składowanej

  2. Dynamiczne wstawianie do instrukcji tabeli zmiennej SQL Server

  3. Kilka świetnych wiadomości dla klientów wersji Standard Edition w programie SQL Server 2014

  4. Sprawdź, czy ciąg zawiera znaki akcentowane w SQL?

  5. Automatycznie upuszczaj i odtwarzaj bieżące indeksy