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> )

Função de janela

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

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

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 |
+---------------+---------------+----------------+

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;
+------+---------------+---------------+
| 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;
100038 (22018): Numeric value 'one' is not recognized