Gesamtanzahl von "1s" in einer Postgres-Bitmaske

8

Gibt es eine Möglichkeit, die Gesamtzahl von 1en in einem Postgres-Bitstring-Typ zu erhalten?

    
Yehuda Katz 15.12.2009, 21:00
quelle

6 Antworten

3

Wenn Sie es wirklich effizient brauchen, hier ist eine Diskussion: Effizient die Anzahl der Bits zu bestimmen im Inhalt von, ein VARBIT-Feld

    
Alex Brasetvik 16.12.2009, 15:36
quelle
9
%Vor%

Und Ansatz ohne String-Konvertierung:

%Vor%     
user80168 15.12.2009 22:58
quelle
0

Das erste / erste Bit? Oder die Gesamtzahl der Bits eingeschaltet? Ersteres: Bitmaske (& amp; 1) das Bit. Letzteres: Eine unangenehme Frage wie:

SELECT (myBit & 1 + myBit >> 1 & 1 + myBit >> 2 & 1) AS bitCount FROM myBitTable;

Ich nehme an, Sie könnten auch in einen String umwandeln und die 1 in PL / SQL zählen.

    
pestilence669 15.12.2009 21:05
quelle
0

Sie haben einen einfachen Weg mit plpgsql hier .

    
Gonzalo 15.12.2009 21:06
quelle
0

Ich weiß, das ist schon ein altes Thema, aber ich fand eine coole Antwort hier: Ссылка

So angepasst wäre es:

%Vor%     
linuzer 04.01.2017 21:56
quelle
0

Gestützt auf die Diskussion hier, der oben erwähnte Thread Effizient die Anzahl der Bits in der festgelegt Inhalt von, einem VARBIT-Feld , Auf der Seite Bit Twiddling Hacks habe ich eine PostgreSQL-Erweiterung veröffentlicht: pg_bitcount . Wenn Sie diese Erweiterung installieren (siehe dortige Anweisungen), können Sie die Anzahl der in einer Bitfolge gesetzten Bits mit:

zählen %Vor%

Ich habe eine Reihe verschiedener Algorithmen für die Leistung verglichen und die Verwendung einer Tabellensuche scheint am schnellsten zu sein. Sie sind alle viel schneller als in Text konvertieren und '0' durch '' ersetzen.

    
Gijs Kant 30.03.2018 14:38
quelle

Tags und Links