Как конвертировать BLOB в DOUBLE в MySQL - PullRequest
1 голос
/ 08 июня 2019

У меня есть столбец BLOB, в котором хранятся 64-битные значения двойной точности IEEE, и я хотел бы привести его к значениям DOUBLE. Я работаю с MySQL 5.7.

Например, у меня есть строка HEX 40053F7CED916872, которая должна приводить к значению DOUBLE 2.656. Я не гуру MySQL и безуспешно исследовал CAST, CONV, CONVERT и другие функции.

Каким-то образом я чувствую, что тону в стакане воды, поэтому я очень ценю ваши идеи.

1 Ответ

1 голос
/ 14 июня 2019

После глубокого погружения в то, как хранятся ДВОЙНЫЕ числа, я наконец-то нашел решение:

    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 в его двоичное представление,извлеките подразделы, соответствующие знаку, показателю степени и мантиссе, преобразуйте их в целые числа и объедините их, чтобы вычислить ДВОЙНОЙ.Некоторые ссылки, которые я использовал:

онлайн-конвертер

учебник

подробнее

Надеюсь, что это может помочь кому-то еще в будущем.С уважением.

Даниил

...