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)