Re: Bit count
От | Josh Kupershmidt |
---|---|
Тема | Re: Bit count |
Дата | |
Msg-id | 4ec1cf760911241114t2bcc9494x8079902702107019@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Bit count (Rikard Bosnjakovic <rikard.bosnjakovic@gmail.com>) |
Список | pgsql-novice |
On Tue, Nov 24, 2009 at 1:18 PM, Rikard Bosnjakovic <rikard.bosnjakovic@gmail.com> wrote: > On Tue, Nov 24, 2009 at 16:47, Nathaniel Trellice <naptrel@yahoo.co.uk> wrote: > > [...] >> If not, can anyone recommend the most efficient way within postgres to implement the kind of bit-counting tricks foundat: > > Perhaps something like this: > > CREATE OR REPLACE FUNCTION bitcount(i integer) RETURNS integer AS $$ > DECLARE n integer; > DECLARE amount integer; > BEGIN > amount := 0; > FOR n IN 1..16 LOOP > amount := amount + ((i >> (n-1)) & 1); > END LOOP; > RETURN amount; > END > $$ LANGUAGE plpgsql; > [snip] Clever! Here's a pure SQL version I whipped up.. perhaps there's a more efficient pure SQL way that can avoid the string operations I'm using :-) # SELECT num, char_length(replace(num::bit(16)::text, '0', '')) AS num_set_bits FROM numbers; num | num_set_bits ------+-------------- 6 | 2 7 | 3 4711 | 7 1024 | 1 Josh
В списке pgsql-novice по дате отправления: