8

このクエリがあります

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

次のエラーが表示されます。

PGError: エラー: 演算子が存在しません: 文字が可変 & 整数
ヒント: 指定された名前と引数の型に一致する演算子はありません。明示的な型キャストを追加する必要がある場合があります。

models_mask は、データベース内の整数です。どうすればこれを修正できますか。

ありがとうございました!

4

1 に答える 1

14

Pg のビット演算子に関するドキュメントを確認してください。

基本的&に、2 つの同種の型 (通常は bit または int) でのみ機能するため、varchar から bit または int のような適切なものに変更model_maskする必要があります。CAST

models_mask::int & 1 -または-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
于 2010-02-01T21:48:58.983 に答える