我正在尝试在 MySQL 中构造一个查询,该查询连接一堆二进制字段,然后给出 DECIMAL 形式的结果。
例如:
SELECT CONCAT (setting1, setting2, setting3) AS settings;
可能给了我:
101
111
110
我想将此值传递给一个函数(转换?强制转换?),它将给我相应的 DECIMAL 值:
5
7
6
我已经尝试了一些
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(十进制到十六进制),然后我们将十六进制转换为二进制。
当选择时,我们进行BIN到HEX,HEX到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)