Re: Efficiently determining the number of bits set in the contents of, a VARBIT field
От | TJ O'Donnell |
---|---|
Тема | Re: Efficiently determining the number of bits set in the contents of, a VARBIT field |
Дата | |
Msg-id | 488C7ED1.8050908@acm.org обсуждение исходный текст |
Ответы |
Re: Re: Efficiently determining the number of bits set in the
contents of, a VARBIT field
|
Список | pgsql-sql |
I use a c function, nbits_set that will do what you need. I've posted the code in this email. TJ O'Donnell http://www.gnova.com #include "postgres.h" #include "utils/varbit.h" Datum nbits_set(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(nbits_set); Datum nbits_set(PG_FUNCTION_ARGS) { /* how many bits are set in a bitstring? */ VarBit *a = PG_GETARG_VARBIT_P(0); int n=0; int i; unsigned char *ap = VARBITS(a); unsigned char aval; for (i=0; i < VARBITBYTES(a); ++i) { aval = *ap; ++ap; if (aval== 0) continue; if (aval & 1) ++n; if (aval & 2) ++n; if (aval & 4) ++n; if (aval & 8) ++n; if (aval & 16) ++n; if (aval & 32) ++n; if (aval & 64) ++n; if (aval & 128) ++n; } PG_RETURN_INT32(n); } > Hi all, > Am looking for a fast and efficient way to count the number of bits set > (to 1) in a VARBIT field. I am currently using > "LENGTH(REGEXP_REPLACE(CAST(a.somefield_bit_code AS TEXT),'0','','g'))". > > Allan.
В списке pgsql-sql по дате отправления: