将十六进制转换为浮点 SQL

use*_*272 4 sql sql-server floating-point hex

我正在尝试找到HEX一种float在 SQL Server中转换为 a的方法。

一个示例值0x42c80000对应于100.00

将此Hex值转换为Intusing很容易,CONVERT但我找不到等效的浮点转换。

Lie*_*sel 5

DECLARE @BinaryFloat AS VARBINARY(4); 
SET @BinaryFloat = CONVERT(VARBINARY, '0x42c80000',1);

SELECT SIGN(CAST(@BinaryFloat AS INT))
  * (1.0 + (CAST(@BinaryFloat AS INT) &  0x007FFFFF) * POWER(CAST(2 AS REAL), -23))
  * POWER(CAST(2 AS REAL), (CAST(@BinaryFloat AS INT) & 0x7f800000) / 0x00800000 - 127)
Run Code Online (Sandbox Code Playgroud)

希望我能获得荣誉,但唉:http : //multikoder.blogspot.com.au/2013/03/converting-varbinary-to-float-in-t-sql.html

另外,有趣的博客https://blogs.msdn.microsoft.com/psssql/2010/11/01/how-it-works-sql-parsing-of-numbers-numeric-and-float-conversions/