4

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

例如:

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

可能给了我:

101
111
110

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

5
7
6

我已经尝试了一些 and 的组合,cast()convert()还没有破解它。

4

4 回答 4

4

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

于 2013-01-23T04:18:33.657 回答
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 到 hex),然后我们将 hex 转换为 bin。

When come the select, we do BIN to HEX, HEX to BIN

实际上,您可以CONV(6, 10, 2)在阅读时做相反的事情。

于 2012-06-14T14:33:04.607 回答
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; 将返回设置2的值。

查看按位函数

于 2012-07-09T19:51:17.677 回答
0

这可能会迟到,但如果有人来了,我们可以结合几个函数来解决这个问题

我们可以使用的第一个函数 CONV 允许我们将输入从某个基数转换为另一个基数,以下示例将 101 从基数 2(二进制)转换为基数 10(十进制):

SELECT CONV(101, 2, 10)

如果源是字符串,我们可以先使用强制转换将其转换为二进制,例如:

SELECT CONV(CAST('11' AS BINARY), 2, 10)
于 2021-09-30T23:50:04.080 回答