所以,我假设你的十六进制字符串是某种TEXT 类型:
SELECT @hexstring := '3F62 0C3C'
您需要做的第一件事是将其转换为小数。您可以使用CONV 函数执行此操作。为此,首先使用 REPLACE 函数从字符串中删除空格。根据CONV 函数的参数,您可以例如获取二进制或十进制表示:
SELECT @binvalue := CONV(REPLACE(@hexstring, ' ', ''), 16, 2) -- 111111011000100000110000111100
SELECT @decvalue := CONV(REPLACE(@hexstring, ' ', ''), 16, 10) -- 1063390268
从十进制表示中,您可以计算您的浮点数(基于this SO answer):
SELECT SIGN(@decvalue) * (1.0 + (@decvalue & 0x007FFFFF) * POWER(2.0, -23))
* POWER(2.0, (@decvalue & 0x7f800000) / 0x00800000 - 127)
结果:
0.8829991817474365
或多合一:
SELECT SIGN(CONV(REPLACE(@hexstring, ' ', ''), 16, 10))
* (1.0 + (CONV(REPLACE(@hexstring, ' ', ''), 16, 10) & 0x007FFFFF)
* POWER(2.0, -23))
* POWER(2.0, (CONV(REPLACE(@hexstring, ' ', ''), 16, 10) & 0x7f800000) / 0x00800000 - 127)
在this db<>fiddle 中一起测试所有这些。