mysql - 如何在 MySQL 中将 BLOB 转换为 DOUBLE
问题描述
我有一个存储 64 位 IEEE 双精度值的 BLOB 列,我想将其转换为 DOUBLE 值。我正在使用 MySQL 5.7。
例如,我有一个 HEX 字符串 40053F7CED916872,它应该转换为 DOUBLE 值 2.656。我不是 MySQL 专家,我研究过 CAST、CONV、CONVERT 和其他函数,但没有运气。
不知何故,我觉得我淹没在一杯水中,所以我非常感谢你的见解。
解决方案
在深入研究了 DOUBLE 数字的存储方式之后,我终于找到了一个解决方案:
SELECT
POW(-1,CONV(SUBSTRING(LPAD(CONV('40053F7CED916872',16,2),64,'0'),1,1),2,10))*
POW(2,CONV(SUBSTRING(LPAD(CONV('40053F7CED916872',16,2),64,'0'),2,11),2,10)-1023)*
(1+CONV(SUBSTRING(LPAD(CONV('40053F7CED916872',16,2),64,'0'),13,52),2,10)/POW(2,52)) AS DBL;
结果:
+-------+
| DBL |
+-------+
| 2.656 |
+-------+
基本上将 BLOB 转换为其二进制表示,提取对应于符号、指数和尾数的小节,将它们转换为整数并将它们组合以计算 DOUBLE。我使用的一些参考资料:
希望这可以在将来对其他人有所帮助。问候。
丹尼尔
推荐阅读
- mysql - 通过 OpenSSL 的 MySQL TLS 验证失败
- c++ - 街头骰子模拟 - 看起来像代码偏差?
- matlab - “输入参数过多”是什么意思?
- amazon-dynamodb - 从 sqs 读取 python 代码并写入 dynamodb 时出错
- java - Libgdx Box2d 多个 SpriteBatch 和 OrthographicCamera
- c# - 如何在空格和其他非字母数字字符处拆分
- python - GNS3 错误:WaitForConnectionWorker 线程停止并出现错误:无法连接到端口 3090 上的 127.0.0.1:[Errno 111] Conexión rehusada
- sql - 如何对多个表使用联合联接,然后使用 WHERE 过滤它们
- node.js - schema.methods 与 schema.statics
- python - 如何在 Pandas 0.24.2 中将 offsets.MonthEnd 系列转换为 int