如何在Postgresql中将位类型转换为bytea类型

3
我想在PostgreSQL中将位类型转换为bytea类型。像这样。
select (b'1010110011001100' & b'1011000011110000')::bytea;

然而,出现了错误。
ERROR:  cannot cast type bit to bytea
LINE 1: select (b'1010110011001100' & b'1011000011110000')::bytea;

我只想对位字符串执行操作并转换为bytea类型。


你分析了吗?https://www.postgresql.org/docs/9.3/static/functions-binarystring.html? - OMANSAK
是的,我已经阅读了它。但是,我找不到任何线索来解决这个问题。 - Boblishus
你为什么想要保存为 bytea,并且你对查询的期望结果是什么? - D-Shih
1
最初,数据以bytea类型存储在数据库中。为了进行位运算,它从bytea转换为bit。然而,计算出的位无法反转回bytea。 - Boblishus
@Boblishus 我给你写了一个答案,你可以试试看。 - D-Shih
2个回答

3

将位值转换为十六进制并使用 decode()

select decode(to_hex((b'1010110011001100' & b'1011000011110000')::int), 'hex')

 decode 
--------
 \xa0c0
(1 row) 

1
这似乎是正确的。然而,在300位数字比特的情况下,出现了“ERROR: integer out of range”的错误。我想对超过1000位数字比特进行按位操作。 - Boblishus
计算出来的位数可能需要分成一小段范围的位,然后按照您的建议将这些位转换为bytea。 - Boblishus
1
一种方法是使用 bigint 将文本表示分成 32 个十六进制数字部分。您还可以尝试 pg-bignum 扩展。 - klin
1
丑陋的PostgreSQL,即使在现在(2019年!)也没有从varbitbytea高效转换选项!? - Peter Krauss

-3
select decode((b'1010110011001100' & b'1011000011110000')::text,'escape')

或者

select ((b'1010110011001100' & b'1011000011110000')::text)::bytea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接