我有一个带有bytea字段的表,如果我可以通过命令行(或pgAdmin的查询执行程序)进行查询,那将会很方便。我将十六进制值作为字符串。是否有内置函数将十六进制转换为bytea?
我想做点什么:
SELECT * FROM table WHERE my_bytea_field=some_???_function('fa26e312');
其中'fa26e312'是我想要的bytea字段的十六进制值。
注意:这只是在我开发/调试时有用,我可以通过代码完成,但我希望能够在查询中手动完成。
答案 0 :(得分:4)
尝试使用内置的decode(string text, type text)
函数(它返回bytea
)。您可以在非交互模式下使用psql
通过CLI运行查询,即使用-c
开关(如果您愿意,还有一些格式选项):
psql -c "SELECT * FROM table WHERE my_bytea_field=decode('fa26e312', 'hex');"
示例:
CREATE TABLE test(id serial, my_bytea_field bytea);
INSERT INTO test (my_bytea_field) VALUES
(E'\\320\\170'::bytea),
(E'\\100\\070'::bytea),
(E'\\377\\377'::bytea);
psql -tc "SELECT * FROM test WHERE my_bytea_field=decode('ffff', 'hex');"
3 | \377\377
答案 1 :(得分:0)
SELECT * FROM table WHERE my_bytea_field=E'\\xfa26e312';
就像Binary Data Types文档中的示例一样(注意E'\\ x'前缀):
SELECT E'\\xDEADBEEF';