如何为变量分配位数据类型值?

时间:2016-08-28 03:25:12

标签: mysql sql bit

我有一张这样的表:

// mytable
+---------+-------------+
|   id    |    bitmap   |
+---------+-------------+
| int(11) |   BIT(10)   |
+---------+-------------+
| 1       | 01111111000 |
| 2       | 01111111111 |
| 3       | 00000000001 |
+---------+-------------+

这些是当前和预期产出的一些例子:

例1:

SELECT bitmap INTO @var FROM mytable WHERE id = 1;
SELECT @var;
/* Current output: 1016
   Expected output: 01111111000
*/

例2:

SELECT bitmap INTO @var FROM mytable WHERE id = 2;
SELECT @var;
/* Current output: 1023
   Expected output: 01111111111
*/

示例3:

SELECT bitmap INTO @var FROM mytable WHERE id = 3;
SELECT @var;
/* Current output: 1
   Expected output: 00000000001
*/

那我该怎么做?如您所见,我尝试将该列的原始位值分配给该变量(但似乎有转换,我该如何避免?)。我真的不知道@var为什么不包含二进制值。

1 个答案:

答案 0 :(得分:0)

您可以使用bitmap函数将@var列值的二进制表示形式提供给CONV(N,from_base,to_base)

SELECT CONV(bitmap,2,2) INTO @var FROM mytable WHERE id = 1;
SELECT @var;

注意:

CONV()函数

MySQL CONV()将一个数字从一个数字基数系统转换为另一个数字基数系统。转换后,函数返回数字的字符串表示。

如果定义的参数为NULL,则返回值为NULL

最小基数为2,最大基数为36.如果要转换的基数为负数,则该数字被视为带符号数。否则,它被视为无符号。

语法:

CONV(num , from_base , to_base );

<强>参数

Name       Description
num        A number.
from_base  Existing base of the number num.
to_base    Base of the number num after conversion.