このクエリがあります
SELECT * FROM "functions" WHERE (models_mask & 1 > 0)
次のエラーが表示されます。
PGError: エラー: 演算子が存在しません: 文字が可変 & 整数
ヒント: 指定された名前と引数の型に一致する演算子はありません。明示的な型キャストを追加する必要がある場合があります。
models_mask は、データベース内の整数です。どうすればこれを修正できますか。
ありがとうございました!
このクエリがあります
SELECT * FROM "functions" WHERE (models_mask & 1 > 0)
次のエラーが表示されます。
PGError: エラー: 演算子が存在しません: 文字が可変 & 整数
ヒント: 指定された名前と引数の型に一致する演算子はありません。明示的な型キャストを追加する必要がある場合があります。
models_mask は、データベース内の整数です。どうすればこれを修正できますか。
ありがとうございました!
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