O AnalyticDB for MySQL oferece suporte às seguintes funções e operadores de bits para processar dados binários.
|
Função/operador |
Sintaxe |
Descrição |
||
|
BIT_COUNT |
|
Conta os bits definidos como |
||
|
|
|
AND bit a bit |
||
|
|
|
NOT bit a bit (inverte todos os bits) |
||
|
|
` |
|
y` |
OR bit a bit |
|
|
|
XOR bit a bit |
||
|
|
|
Desloca |
||
|
|
|
Desloca |
BIT_COUNT
Sintaxe
bit_count(bigint x)
bit_count(double x)
bit_count(varchar x)
Descrição
Converte o argumento para sua representação binária e retorna a quantidade de bits definidos como 1.
Tipo de retorno: BIGINT
Notas de uso
Se o argumento for do tipo
double, ele será truncado parabigintantes da contagem de bits. Por exemplo,pi()(aproximadamente 3,14159) é truncado para3(binário:11), que possui 2 bits definidos como1.
Exemplos
SELECT bit_count(2);
-- 2 in binary is 10, which has 1 bit set to 1
+--------------+
| bit_count(2) |
+--------------+
| 1 |
SELECT bit_count(pi());
-- pi() is approximately 3.14159, truncated to 3 (binary: 11), which has 2 bits set to 1
+-----------------+
| bit_count(pi()) |
+-----------------+
| 2 |
SELECT bit_count('123');
-- '123' is cast to bigint 123 (binary: 1111011), which has 6 bits set to 1
+------------------+
| bit_count('123') |
+------------------+
| 6 |
& (AND bit a bit)
Descrição
Retorna o AND bit a bit de dois valores. Cada bit do resultado é 1 somente se os bits correspondentes em ambos os operandos forem 1.
Tipo de retorno: BIGINT
Exemplo
SELECT 12 & 15;
-- 12 in binary: 1100
-- 15 in binary: 1111
-- AND result: 1100 = 12
+---------------------+
| bitwise_and(12, 15) |
+---------------------+
| 12 |
~ (NOT bit a bit)
Descrição
Inverte todos os bits do operando.
Tipo de retorno: BIGINT
Exemplo
SELECT 2 & ~1;
-- ~1 inverts all bits of 1, then AND with 2
+--------------------------------+
| bitwise_and(2, bitwise_not(1)) |
+--------------------------------+
| 2 |
| (OR bit a bit)
Descrição
Retorna o OR bit a bit de dois valores. Cada bit do resultado é 1 se pelo menos um dos bits correspondentes nos operandos for 1.
Tipo de retorno: BIGINT
Exemplo
SELECT 29 | 15;
-- 29 in binary: 11101
-- 15 in binary: 01111
-- OR result: 11111 = 31
+--------------------+
| bitwise_or(29, 15) |
+--------------------+
| 31 |
^ (XOR bit a bit)
Descrição
Retorna o XOR bit a bit de dois valores. Cada bit do resultado é 1 se os bits correspondentes nos operandos diferirem.
Tipo de retorno: BIGINT
Exemplo
SELECT 1 ^ 10;
-- 1 in binary: 0001
-- 10 in binary: 1010
-- XOR result: 1011 = 11
+--------------------+
| bitwise_xor(1, 10) |
+--------------------+
| 11 |
>> (BITWISE_RIGHT_SHIFT)
Sintaxe
bitwise_right_shift(bigint x, bigint y)
bitwise_right_shift(double x, double y)
bitwise_right_shift(varchar x, varchar y)
Descrição
Desloca x em y bits à direita. Bits deslocados além da posição menos significativa são descartados.
Tipo de retorno: BIGINT
Notas de uso
Argumentos
doubleevarcharsão truncados parabigintantes do deslocamento.
Exemplos
SELECT 3 >> 2;
-- 3 in binary: 11; right-shifting by 2 discards all bits, result is 0
+---------------------------+
| bitwise_right_shift(3, 2) |
+---------------------------+
| 0 |
SELECT 3.4 >> 23.2;
-- 3.4 and 23.2 are truncated to 3 and 23; 3 >> 23 discards all bits, result is 0
+--------------------------------+
| bitwise_right_shift(3.4, 23.2) |
+--------------------------------+
| 0 |
<< (BITWISE_LEFT_SHIFT)
Sintaxe
bitwise_left_shift(bigint x, bigint y)
bitwise_left_shift(double x, double y)
bitwise_left_shift(varchar x, varchar y)
Descrição
Desloca x em y bits à esquerda. Zeros preenchem as posições de bits desocupadas à direita.
Tipo de retorno: BIGINT
Notas de uso
Argumentos
doubleevarcharsão truncados parabigintantes do deslocamento.
Exemplos
SELECT 3 << 2;
-- 3 in binary: 11; left-shifting by 2 gives 1100 = 12
+--------------------------+
| bitwise_left_shift(3, 2) |
+--------------------------+
| 12 |
SELECT '3' << '2';
-- '3' and '2' are cast to bigint 3 and 2; result is 12
+------------------------------+
| bitwise_left_shift('3', '2') |
+------------------------------+
| 12 |
SELECT 3.4 << 23.2;
-- 3.4 and 23.2 are truncated to 3 and 23; 3 << 23 = 25165824
+-------------------------------+
| bitwise_left_shift(3.4, 23.2) |
+-------------------------------+
| 25165824 |