Побитовое маскирование в Пост-ГРЭС

У меня есть этот запрос

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

и я получает следующую ошибку:

PGError: ОШИБКА: оператор не существует: символьное варьирование и целое число
ПОДСКАЗКА: Никакой оператор не соответствует имени и типу (типам) аргумента. Вы, возможно, должны были бы добавить явные броски типа.

models_mask является целым числом в базе данных. Как я могу зафиксировать это.

Спасибо!

5
задан Evan Carroll 2 February 2010 в 04:59
поделиться

1 ответ

Проверьте документы на битовых операторах для PG.

По сути & & работает только на двух типах типа (обычно бит или int), поэтому Model_Mask должен быть CAST из Варрара к чему-то разумному Бит или INT:

Model_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
12
ответ дан 13 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: