相当于 Postgresql 中 Oracle 的 UTL_RAW.BIT_OR

Equivalent of UTL_RAW.BIT_OR of Oracle in Postgresql

select utl_raw.bit_or('32','3') from dual;

Result : 33

我想知道如何在 postgresql 中获得类似的输出。请帮忙

没有内置函数。

用您选择的过程语言编写它应该不会太难。对于 PL/pgSQL,您可以使用 get_byte()set_byte() 函数。

utl_raw.bit() 显然使用十六进制值。

Postgres 只支持 bit strings 上的位操作,这意味着这些十六进制输入值需要转换为位字符串,然后才能使用内置函数。

基于Erwin's answer将十六进制转换为位,可以这样做:

select (x'32'::bit(8) | x'03'::bit(8));

这个returns

00110011

注意第二个值的前导 0x'3'::bit(8) 将 return 00110000 但如果使用前导 0,则转换为位串会导致 00000011。有关详细信息,请参阅链接的答案。

要得到一个十六进制数,我们必须先把它转换成一个整数,然后我们可以在上面使用to_hex():

select to_hex((x'32'::bit(8) | x'03'::bit(8))::int)

returns 33