首页 > 解决方案 > 如何在 MySQL 中将 BLOB 转换为 DOUBLE

问题描述

我有一个存储 64 位 IEEE 双精度值的 BLOB 列,我想将其转换为 DOUBLE 值。我正在使用 MySQL 5.7。

例如,我有一个 HEX 字符串 40053F7CED916872,它应该转换为 DOUBLE 值 2.656。我不是 MySQL 专家,我研究过 CAST、CONV、CONVERT 和其他函数,但没有运气。

不知何故,我觉得我淹没在一杯水中,所以我非常感谢你的见解。

标签: mysqlcastingdouble

解决方案


在深入研究了 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。我使用的一些参考资料:

在线转换器

教程

更多细节

希望这可以在将来对其他人有所帮助。问候。

丹尼尔


推荐阅读