AnalyticDB for MySQL支持以下位函数和操作符。

BIT_COUNT

bit_count(bigint x)
bit_count(double x)
bit_count(varchar x)
  • 命令说明:系统先将参数转换为二进制,然后返回二进制中1的个数。
  • 返回值类型:BIGINT。
  • 示例:
    select bit_count(2);
    +--------------+
    | bit_count(2) |
    +--------------+
    |            1 |
    select bit_count(pi());
    +-----------------+
    | bit_count(pi()) |
    +-----------------+
    |               2 |
    select bit_count('123');
    +------------------+| 
    bit_count('123') |
    +------------------+
    |                6 | 

&

  • 命令说明:按位AND
  • 返回值类型:BIGINT。
  • 示例:
     select 12 & 15;
    +---------------------+
    | bitwise_and(12, 15) |
    +---------------------+
    |                  12 |

~

  • 命令说明:反转所有位。
  • 返回值类型:BIGINT。
  • 示例:
    select 2 & ~1;
    +--------------------------------+
    | bitwise_and(2, bitwise_not(1)) |
    +--------------------------------+
    |                              2 |

|

  • 命令说明:按位OR
  • 返回值类型:BIGINT。
  • 示例:
    select 29 | 15;
    +--------------------+
    | bitwise_or(29, 15) |
    +--------------------+
    |                 31 

^

  • 命令说明:按位异或。
  • 返回值类型:BIGINT。
  • 示例:
    select 1 ^ 10;
    +--------------------+
    | bitwise_xor(1, 10) |
    +--------------------+
    |                 11 | 

>>(BITWISE_RIGHT_SHIFT)

bitwise_right_shift(double x, double y) 
bitwise_right_shift(varchar x, varchar y)
bitwise_right_shift(bigint x, bigint y)
  • 命令说明:向右移位。
  • 返回值类型:BIGINT。
  • 示例:
    select 3 >> 2;
    +---------------------------+
    | bitwise_right_shift(3, 2) |
    +---------------------------+
    |                         0 |
    select 3.4 >> 23.2;
    +--------------------------------+
    | bitwise_right_shift(3.4, 23.2) |
    +--------------------------------+
    |                              0 |

<<(BITWISE_LEFT_SHIFT)

bitwise_left_shift(double x, double y) 
bitwise_left_shift(varchar x, varchar y)
bitwise_left_shift(bigint x, bigint y)
  • 命令说明:向左移位。
  • 返回值类型:BIGINT。
  • 示例:
    SELECT 3 << 2;
    +--------------------------+
    | bitwise_left_shift(3, 2) |
    +--------------------------+
    |                       12 |
    select '3' << '2';
    +------------------------------+
    | bitwise_left_shift('3', '2') |
    +------------------------------+
    |                           12 |
    select 3.4 << 23.2;
    +-------------------------------+
    | bitwise_left_shift(3.4, 23.2) |
    +-------------------------------+
    |                      25165824 |