8

我有这个查询

SELECT * FROM "functions" WHERE (models_mask & 1 > 0)

我收到以下错误:

PGError:错误:运算符不存在:字符变化和整数
提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。

models_mask 是数据库中的整数。我怎样才能解决这个问题。

谢谢!

4

1 回答 1

14

查看有关 Pg的位运算符的文档。

基本上&只适用于两种类似的类型(通常是 bit 或 int),因此model_mask必须CAST从 varchar 编辑为合理的类型,如 bit 或 int:

models_mask::int & 1 - 或-models_mask::int::bit & b'1'

\doS您可以使用in找出运算符使用的类型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
于 2010-02-01T21:48:58.983 回答