我有这个查询
SELECT * FROM "functions" WHERE (models_mask & 1 > 0)
我收到以下错误:
PGError:ERROR:运算符不存在:字符变化&整数
提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
models_mask是数据库中的整数。我该如何解决这个问题。
谢谢!
答案 0 :(得分:12)
查看docs on bit operators的Pg。
基本上&
只适用于两种类似的类型(通常是bit或int),因此model_mask
必须从varchar CAST
编译为像bit或int这样合理的东西:
models_mask::int & 1
-or - models_mask::int::bit & b'1'
您可以使用\doS
psql
找出运营商使用的类型
pg_catalog | & | bigint | bigint | bigint | bitwise and
pg_catalog | & | bit | bit | bit | bitwise and
pg_catalog | & | inet | inet | inet | bitwise and
pg_catalog | & | integer | integer | integer | bitwise and
pg_catalog | & | smallint | smallint | smallint | bitwise and
以下是更多信息的快速示例
# SELECT 11 & 15 AS int, b'1011' & b'1111' AS bin INTO foo;
SELECT
# \d foo
Table "public.foo"
Column | Type | Modifiers
--------+---------+-----------
int | integer |
bin | "bit" |
# SELECT * FROM foo;
int | bin
-----+------
11 | 1011