- Categorias:
Funções de agregação (Bit a bit) , Funções de janela (Geral) , Funções de expressões bit a bit
BITXOR_AGG¶
Retorna o valor XOR bit a bit de todos os registros numéricos diferentes de NULL em um grupo.
Em cada posição de bit, se um número par de linhas tiver aquele bit definido como 1, então a função retornará 0 para aquele bit, e se um número ímpar de linhas tiver aquele bit definido como 1, então a função retornará 1 para aquele bit.
Se todos os registros dentro do grupo forem NULL, ou se o grupo estiver vazio, a função retorna NULL.
- Aliases:
BITXORAGG , BIT_XOR_AGG, BIT_XORAGG
- Consulte também:
Sintaxe¶
Função de agregação
BITXOR_AGG( [ DISTINCT ] <expr1> )
Função de janela
BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Argumentos¶
expr1
A expressão de entrada deve ser uma expressão que pode ser avaliada como um número ou convertida em um número.
expr2
Esta expressão é usada para agrupar as linhas em partições.
Retornos¶
O tipo de dados do valor retornado é NUMERIC(38, 0).
Notas de uso¶
Os valores numéricos são agregados ao tipo de dados inteiro mais próximo. Os valores decimais e de ponto flutuante são arredondados para o número inteiro mais próximo antes da agregação.
Agregando uma coluna de caracteres/texto (tipo de dados VARCHAR, CHAR, STRING etc.), implicitamente converte os valores de entrada em FLOAT, depois arredonda os valores para o número inteiro mais próximo. Se a conversão não for possível, o valor é tratado como NULL.
Quando usado como uma função de janela:
Esta função não oferece suporte para:
Subcláusula ORDER BY na cláusula OVER().
Quadros de janela.
Exemplos¶
Criar a tabela e carregar os dados:
CREATE OR REPLACE TABLE bitwise_example (k int, d decimal(10,5), s1 varchar(10), s2 varchar(10)); INSERT INTO bitwise_example VALUES (15, 1.1, '12','one'), (26, 2.9, '10','two'), (12, 7.1, '7.9','two'), (14, null, null,'null'), (8, null, null, 'null'), (null, 9.1, '14','nine');
Exibir os dados:
SELECT k AS k_col, d AS d_col, s1, s2 FROM bitwise_example ORDER BY k_col; +-------+---------+------+------+ | K_COL | D_COL | S1 | S2 | |-------+---------+------+------| | 8 | NULL | NULL | null | | 12 | 7.10000 | 7.9 | two | | 14 | NULL | NULL | null | | 15 | 1.10000 | 12 | one | | 26 | 2.90000 | 10 | two | | NULL | 9.10000 | 14 | nine | +-------+---------+------+------+
Consultar os dados:
select bitxor_agg(k), bitxor_agg(d), bitxor_agg(s1) from bitwise_example; +---------------+---------------+----------------+ | BITXOR_AGG(K) | BITXOR_AGG(D) | BITXOR_AGG(S1) | |---------------+---------------+----------------| | 31 | 12 | 0 | +---------------+---------------+----------------+
Consultar os dados e utilizar um GROUP BY
:
select s2, bitxor_agg(k), bitxor_agg(d) from bitwise_example group by s2 order by 3; +------+---------------+---------------+ | S2 | BITXOR_AGG(K) | BITXOR_AGG(D) | |------+---------------+---------------| | one | 15 | 1 | | two | 22 | 4 | | nine | NULL | 9 | | null | 6 | NULL | +------+---------------+---------------+
Se você passar cadeias de caracteres que não podem ser convertidas em números por essa função, um erro será gerado:
select bitxor_agg(s2) from bitwise_example;100038 (22018): Numeric value 'one' is not recognized