Categorias:

Funções de agregação (Bitwise) , Funções de janela (General) , 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:

BITAND_AGG , BITOR_AGG

BITXOR

Sintaxe

Função de agregação

BITXOR_AGG( [ DISTINCT ] <expr1> )
Copy

Função de janela

BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

Argumentos

expr1

Esta expressão deve ser avaliada como um valor numérico ou um valor de um tipo de dados que pode ser convertido em um valor numérico.

expr2

Esta expressão é usada para agrupar as linhas em partições.

Retornos

O tipo de dados do valor retornado é NUMBER(38, 0).

Notas de uso

  • Os valores numéricos são agregados ao tipo de dados INTEGER mais próximo. Valores decimais e de ponto flutuante são arredondados para o 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.

  • A palavra-chave DISTINCT pode ser especificada para estas funções, mas não tem qualquer efeito.

  • Quando esta função é chamada como uma função de janela, ela não oferece suporte para:

    • Uma cláusula ORDER BY dentro da cláusula OVER.

    • Quadros de janela explícitos.

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');
Copy

Exibir os dados:

SELECT k AS k_col, d AS d_col, s1, s2
  FROM bitwise_example
  ORDER BY k_col;
Copy
+-------+---------+------+------+
| 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;
Copy
+---------------+---------------+----------------+
| BITXOR_AGG(K) | BITXOR_AGG(D) | BITXOR_AGG(S1) |
|---------------+---------------+----------------|
|            31 |            12 |              0 |
+---------------+---------------+----------------+

Consulte os dados e use uma cláusula GROUP BY:

SELECT s2, 
       BITXOR_AGG(k), 
       BITXOR_AGG(d) 
  FROM bitwise_example 
  GROUP BY s2
  ORDER BY 3;
Copy
+------+---------------+---------------+
| S2   | BITXOR_AGG(K) | BITXOR_AGG(D) |
|------+---------------+---------------|
| one  |            15 |             1 |
| two  |            22 |             4 |
| nine |          NULL |             9 |
| null |             6 |          NULL |
+------+---------------+---------------+

Se você passar para esta função cadeias de caracteres que não podem ser convertidas em valores NUMBER, um erro será retornado:

SELECT BITXOR_AGG(s2) FROM bitwise_example;
Copy
100038 (22018): Numeric value 'one' is not recognized