A função BIT_AND executa operações AND bit-wise em todos os valores em uma única coluna ou expressão de inteiros. Essa função agrega cada bit de cada valor binário que corresponde a cada valor inteiro na expressão.
A função BIT_AND retorna um resultado de 0
se nenhum dos bits estiver definido como 1 ao longo de todos os valores. Se um ou mais bits estiver definido como 1 ao longo de todos os valores, a função retorna um valor inteiro. Este inteiro é o número que corresponde ao valor binário para os bits.
Por exemplo, uma tabela contém quatro valores inteiros em uma coluna: 3, 7, 10 e 22. Esses números inteiros são representados na forma binária da seguinte forma:
Inteiro | Valor binário |
---|---|
3 | 11 |
7 | 111 |
10 | 1010 |
22 | 10110 |
Uma operação de BIT_AND neste conjunto de dados identifica que todos os bits estão definidos como 1
somente na penúltima posição. O resultado é um valor binário de 00000010
, que representa o valor inteiro 2
. Portanto, a função BIT_AND retorna 2
.
Sintaxe
BIT_AND ( [DISTINCT | ALL] expression )
Argumentos
- expressão
-
A coluna ou expressão de destino na qual a função opera. Essa expressão deve ter um tipo de dados INT, INT2 ou INT8. A função retorna um tipo de dados INT, INT2 ou INT8 equivalente.
- DISTINCT | ALL
-
Com o argumento DISTINCT, a função elimina todos os valores duplicados para a expressão especificada antes de calcular o resultado. Com o argumento ALL, a função retém todos os valores duplicados. ALL é o padrão. Para obter mais informações, consulte Compatibilidade DISTINCT para agregações bit-wise.
Exemplos
Considerando que informações comerciais significativas são armazenadas em colunas de inteiros, você pode usar funções bit-wise para extrair e agregar essas informações. A seguinte consulta aplica a função BIT_AND na coluna de LIKES em uma tabela chamada USERLIKES e agrupa os resultados pela coluna CITY.
select city, bit_and(likes) from userlikes group by city
order by city;
city | bit_and
--------------+---------
Los Angeles | 0
Sacramento | 0
San Francisco | 0
San Jose | 64
Santa Barbara | 192
(5 rows)
Esses resultados podem ser interpretados da seguinte forma:
-
O valor inteiro
192
para Santa Bárbara é traduzido para o valor binário11000000
. Em outras palavras, todos os usuários nesta cidade gostam de esportes e de teatro, mas nem todos os usuários gostam de qualquer outro tipo de evento. -
O inteiro
64
o traduz para01000000
. Portanto, para os usuários de San José, o único tipo de evento de que todos gostam é o teatro. -
Os valores de
0
para as outras três cidades indicam que nenhum “gosto” é compartilhado por todos os usuários nessas cidades.