Postgresql Преобразовать бит, изменяющийся в целое число

Поиск в документации postgresql http://www.postgresql.org/docs/8.4/interactive/functions-bitstring.html для получения информации о преобразовании битовых переменных в целые.

Но не смог найти никакой информации.

select '011111'::bit(4)::varbit(4)::integer as varbit

Ценю ваш ответ.


person Mydeveloperpal    schedule 29.07.2014    source источник


Ответы (2)


В одну сторону:

SELECT b, lpad(b::text, 32, '0')::bit(32)::int
FROM (
    VALUES
     ('01'::varbit)
    ,('011111')
    ,('111')
 ) t (b);

Результат:

b      | lpad
-------+------
01     |    1
011111 |   31
111    |    7

Связанный ответ:

person Erwin Brandstetter    schedule 29.07.2014
comment
Спасибо, но я хотел, чтобы у меня был столбец с разным типом, и я хотел преобразовать его в целое число. - person Mydeveloperpal; 29.07.2014
comment
@Pals: Актерский состав ::bit(32) отсутствовал в моем первом наброске. Исправлено и добавлено демо. - person Erwin Brandstetter; 29.07.2014
comment
Он работает только для 32 бит. Какое решение, если у меня более 32 бит? - person Mydeveloperpal; 29.07.2014
comment
@Pals: Как бы вы преобразовали это в 4-байтовое целое число, которое не может содержать более 32 бит информации? Вы запрашивали integer . Следующий шаг — bigint с 64-битной версией. - person Erwin Brandstetter; 29.07.2014

Допустим, наша таблица имеет 3 столбца и 3 строки. Мы можем смоделировать это с помощью:

select *
from (
    values ('row1', 1::int, 12::bit(8)::varbit), 
           ('row2', 2::int, 23::bit(8)::varbit), 
           ('row3', 3::int, 34::bit(8)::varbit)
) as T(A,B,C);

Как видите, первый столбец — varchar, второй — int, а третий — varbit.

Преобразуем третий столбец в int:

select C::bit(8)::int 
from (
    values ('row1', 1::int, 12::bit(8)::varbit), 
           ('row2', 2::int, 23::bit(8)::varbit), 
           ('row3', 3::int, 34::bit(8)::varbit)
) as T(A,B,C);
==C==
  12
  23
  34

Дело в том, что вы должны сначала преобразовать его в bit(n), а затем вы можете преобразовать bit(n) в varbit. То же самое верно и для int до varbit.

person Ramazan Polat    schedule 19.06.2019