Equivalent of UTL_RAW.BIT_OR of Oracle in Postgresql


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

请注意第二个值的领先0x'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()功能。

最新更新