使用MySQL将二进制转换为十进制

时间:2012-06-14 14:29:32

标签: mysql binary decimal

我正在尝试在MySQL中构建一个查询,它连接了一堆二进制字段,然后将结果作为DECIMAL提供给我。

e.g:

SELECT CONCAT (setting1, setting2, setting3) AS settings;

可能会给我:

101
111
110

我想将此值传递给函数(convert?cast?),它将为我提供相应的DECIMAL值:

5
7
6

我已经尝试过cast()convert()的几种组合,但还没有破解它。

3 个答案:

答案 0 :(得分:2)

CONV(BINARY(CONCAT(setting1,setting2)),2,10)

答案 1 :(得分:1)

没试过,但试试吧。

首先,你的输入让我们说是6。

INSERT INTO Table (FieldTest) VALUES (UNHEX(CONV(6, 10, 16)))
SELECT CONV(HEX(UNHEX(6)), 16, 10)

带字段

SELECT CONV(HEX(FieldTest), 16, 10))

UNHEX将数据从十六进制转换为二进制。

CONV会将数据从一个基地转换为另一个基地。

这里将基数10转换为16(dec为十六进制),然后我们将十六进制转换为bin。

当选择时,我们做BIN到HEX,HEX到BIN

实际上,你可以做CONV(6, 10, 2),反之亦然。

答案 2 :(得分:0)

您可以尝试以二进制

进行幂数学运算

SELECT setting1 * 4 + setting2 * 2 + setting3 * 1 AS settings;

但这意味着它正在做什么

SELECT setting1 * POW(2, 2) + setting2 * POW(2, 1) + setting3 * POW(2, 0) AS settings;

2 ^ 0代表最右边的位

2 ^ 1是第二个,依此类推......

将来如果你在MySQL中有二进制列,可以更容易将它们合并为一个[在列上留下评论以记住订单]

您可以将数据添加到数据库中,如

INSERT INTO settings (setting) VALUES (setting1 * 4 + setting2 * 2 + setting1 * 1);

然后拉出一个 SELECT setting & 2 FROM settings; 将返回setting2的值。​​

查看Bitwise Functions