2009-12-15 14 views

Respuesta

0

El primero/primer bit? O la cantidad total de bits activados? La primera: máscara de bits (& 1) el bit. Este último: una consulta desagradable, como:

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

supongo, también podría lanzar en una cadena y contar los números 1 de PL/SQL.

+0

número total de bits activados. Casting to a strings parece ser épico no-performant. Supongo que podría escribir una función para manejar la serie de bits (no sé lo suficiente de PL/SQL para saber si puedo recorrer fácilmente bitsize y extraer el resultado) –

+0

Hmmm ... parece que las máscaras de bits * ya * cuerdas internamente, entonces tal vez esa solución no es tan mala como parece. –

0

usted tiene una manera sencilla utilizando plpgsql here.

9
# select length(replace(x::text, '0', '')) from (values ('1010111101'::bit varying)) as something(x); 
length 
-------- 
     7 
(1 row) 

y el enfoque sin conversión de cadenas:

# select count(*) from (select x, generate_series(1, length(x)) as i from (values ('1010111101'::bit varying)) as something(x)) as q where substring(x, i, 1) = B'1'; 
count 
------- 
    7 
(1 row) 
+0

Me gusta el método de reemplazo de cadena y longitud. +1 – pestilence669

Cuestiones relacionadas