Postgres位掩码中的"1"总数

Yeh*_*atz 8 postgresql

有没有办法在Postgres"位串"类型中获得1的总数?

小智 10

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

没有字符串转换的方法:

# 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)
Run Code Online (Sandbox Code Playgroud)


Ale*_*vik 3

如果您需要它真正高效,请进行以下讨论:Efficiently certaining the number of bits set in thecontents of, a VARBIT field

  • @YehudaKatz:链接中的讨论很有趣,但它是关于“第一位设置”和“最后一位设置”,这并没有回答手头的问题。这怎么可能是正确答案呢? (2认同)