2016-05-30 89 views
2

我正试图在SQL Server中找到一种将HEX转换为float的方法。将十六进制转换为浮点SQL

示例值为0x42c80000,其对应于100.00

使用CONVERT很容易将此Hex值转换为Int,但我找不到浮点转换等效项。

回答

3
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) 

希望我能居功,但很可惜: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/