select utl_raw.bit_or('32','3') from dual;
Result : 33
我想知道如何在PostgreSQL中获得类似的输出。请帮助。
utl_raw.bit()
显然使用了十六进制值。
Postgres仅在位字符串上支持位操作,这意味着需要将这些十六进制的输入值转换为位字符串,然后您可以使用内置功能。
基于Erwin的回答将十六进制转换为BIT,您可以做到这一点:
select (x'32'::bit(8) | x'03'::bit(8));
这返回
00110011
请注意第二个值的领先0
。x'3'::bit(8)
将返回00110000
,但使用领先的0
将转换为位字符串导致00000011
中的一个。有关此的更多详细信息,请参见链接的答案。
要回到十六进制号码,我们必须首先将其转换为整数,然后我们可以在上面使用to_hex()
:
select to_hex((x'32'::bit(8) | x'03'::bit(8))::int)
返回33
没有内置功能。
在您选择的程序语言中写这句话并不难。对于PL/PGSQL,您可以使用get_byte()
和set_byte()
功能。