相当于Postgresql中Oracle的UTL_RAW.BIT_OR

时间:2017-12-12 13:56:15

标签: oracle postgresql oracle11g postgresql-9.4

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

Result : 33

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

没有内置功能。<​​/ p>

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