【问题标题】:Convert a binary to decimal using MySQL使用 MySQL 将二进制转换为十进制
【发布时间】:2012-06-17 14:46:01
【问题描述】:

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

例如:

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

可以给我:

101
111
110

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

5
7
6

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

【问题讨论】:

标签: mysql binary decimal


【解决方案1】:

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

【讨论】:

  • 最佳最短精确答案
【解决方案2】:

没试过,但试试看。

首先,假设您的输入是 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),反之亦然。

【讨论】:

  • 试过了.. 不太奏效。我认为问题可能是 CONCAT (setting1,setting2,setting3) - 这给了我们一个 1 和 0 的字符串 --- 可能需要 cast() 到二进制?
  • 您的字段是 BINARY 吗?因为如果你运行这个:SELECT CONV(HEX(UNHEX(6)), 16, 10),结果将是6。
  • 没有该字段是一个字符串,因为当你 CONCAT 所有单独的 1 和 0 时 - 你会留下一个字符串。
  • @Tenakha 这就是原因。使用 BINARY 字段将数据存储为 BINARY。如果只有 110 或 111 的事件...使用 BINARY(2) 存储类似 1111 OR 0100 OR 0101... 的字符串
【解决方案3】:

你可以尝试用二进制做幂数学

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。

【讨论】:

    【解决方案4】:

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

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

    SELECT CONV(101, 2, 10)
    

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

    SELECT CONV(CAST('11' AS BINARY), 2, 10)
    

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 2014-02-10
      • 2013-01-24
      • 2016-08-28
      相关资源
      最近更新 更多