2009-12-15 61 views

回答

0

第一位?或者翻转的总位数?前者:位掩码(& 1)位。后者:一个讨厌的查询,如:

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

我想,你也可以转换为字符串并计算在PL/SQL 1的。

+0

翻转的总位数。铸造到一个字符串似乎在史诗上是非高性能的。我想我可以编写一个函数来处理一系列的位(我不知道PL/SQL是否足以知道我是否可以轻松地循环比特并提取结果) – 2009-12-15 21:56:31

+0

嗯......它看起来像位掩码已*字符串内部,所以也许这种解决方案并不像看起来那么糟糕。 – 2009-12-15 21:57:59

0

你有一个简单的方法使用plpgsql here

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

而且没有串转换方法:

# 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

我喜欢字符串replace&length方法。 +1 – pestilence669 2009-12-16 19:13:13

0

我知道,这已经是一个老话题,但我发现一个很酷的答案在这里:https://stackoverflow.com/a/38971017/4420662

所以适应这将是:

=# select length(regexp_replace((B'1010111101')::text, '[^1]', '', 'g')); 
length 
-------- 
     7 
(1 row)