我正在尝试在 MySQL 中构建一个查询,该查询连接一堆二进制字段,然后将结果作为 DECIMAL 给我。
例如:
SELECT CONCAT (setting1, setting2, setting3) AS settings;
可能给了我:
101
111
110
我想将此值传递给一个函数(convert?cast?),它将给我相应的 DECIMAL 值:
5
7
6
我已经尝试了一些 and 的组合,cast()
但convert()
还没有破解它。
CONV(BINARY(CONCAT(setting1, setting2)), 2, 10)
没试过,但是试试。
首先,您的输入假设是 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)
在阅读时做相反的事情。
你可以尝试用二进制做幂数学
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的值。
查看按位函数。
这可能会迟到,但如果有人来了,我们可以结合几个函数来解决这个问题
我们可以使用的第一个函数 CONV 允许我们将输入从某个基数转换为另一个基数,以下示例将 101 从基数 2(二进制)转换为基数 10(十进制):
SELECT CONV(101, 2, 10)
如果源是字符串,我们可以先使用强制转换将其转换为二进制,例如:
SELECT CONV(CAST('11' AS BINARY), 2, 10)