2016-08-09 24 views
0

Ich habe eine TabelleWie wählt man Werte in var mit BIT-Operation?

create table t 
(id serial primary key, 
name text, 
val INTEGER); 


insert into t(name, val) 
select 'user1', x'0001'::INT 
union all 
select 'user1', x'0010'::INT 
union all 
select 'user1', x'0110'::INT 
union all 
select 'user2', x'0001'::INT 

Wie ich Werte in Variable Bit-Betrieb für Vornamens auswählen kann?

create or replace function get_union(
    name text, 
    OUT retval int 
) 
as $BODY$ 
begin 
-- ? 
end 
$BODY$ language plpgsql; 

Zum Beispiel sollte die Funktion für Namen 'Benutzer1' zurückzukehren 111

select to_hex(x'0001'::int | x'0010'::int | x'0100'::int); 
--- 
111 
+0

Sie keine separate Funktion für diesen benötigt, Postgres kommt mit vielen Aggregatfunktionen f. ex: ['bit_or()'] (https://www.postgresql.org/docs/current/static/functions-aggregate.html) wie in 'select to_hex (bit_or (val)) von t where name = 'user1 "" – pozs

Antwort

1
select to_hex(bit_or(val)), bit_or(val), bit_or(val)::bit(16) 
from t 
where name = 'user1'; 
to_hex | bit_or |  bit_or  
--------+--------+------------------ 
111 | 273 | 0000000100010001