Общее количество “1 с” в битовой маске Пост-ГРЭС

Существует ли способ получить общее количество 1's в типе "строки битов" Пост-ГРЭС?

8
задан Yehuda Katz 15 December 2009 в 21:00
поделиться

4 ответа

Если вам нужно, чтобы это было действительно эффективно, вот обсуждение: Эффективное определение количества битов, установленных в содержимом поля VARBIT

3
ответ дан 5 December 2019 в 12:09
поделиться
# 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)
10
ответ дан 5 December 2019 в 12:09
поделиться

У вас есть простой способ использовать plpgsql здесь.

.
0
ответ дан 5 December 2019 в 12:09
поделиться

Единственный/первый бит? Или общее количество перевернутых битов? Первый: битовая маска (и 1) бит. Второй: Неприятный запрос, вроде:

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

Полагаю, можно было бы и к строке прибегнуть и посчитать 1 в PL/SQL.

.
0
ответ дан 5 December 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: