例如:
SELECT CONCAT (setting1, setting2, setting3) AS settings;
可能给我:
101
111
110
我希望将这个值传递给一个函数(转换?转型?),这个函数会返回相应的DECIMAL值:
5
7
6
我已经尝试了一些cast()
和convert()
的组合,但还没有成功。
将setting1和setting2合并后转为二进制,再将二进制转为十进制
没试过,但可以试一下。
首先,假设你的输入是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 to hex),然后再进行hex到bin的转换。
在选择时,我们进行BIN到HEX,HEX到BIN的转换。
实际上,您可以只需执行CONV(6, 10, 2)
,并在读取时反向执行即可。
SELECT CONV(HEX(UNHEX(6)), 16, 10)
,结果将会是 6
。 - David Bélanger1111
或0100
或0101
这样的字符串... - David Bélanger你可以尝试在二进制中进行幂运算
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的值。
查看按位函数。
可能有点晚了,但如果有人来到这里,我们可以将几个函数组合起来解决问题。
第一个函数是CONV,它允许我们将输入从一种进制转换为另一种进制,以下示例将101从2进制(二进制)转换为10进制(十进制):
SELECT CONV(101, 2, 10)
如果源代码是字符串,我们可以使用强制转换将其首先转换为二进制,例如:
SELECT CONV(CAST('11' AS BINARY), 2, 10)