当我执行以下操作:SQL Server的数字格式
DECLARE @x float
SET @x = 1234.5
SELECT CONVERT(varbinary, @x)
什么是返回的格式?我需要以某种方式从.net返回原始数字,并且我只有二进制值可用。
澄清:
上面的语句返回
(no column name)
0x40934A0000000000
不知怎的,我得值12345.5从二进制数据0x40934A0000000000回来。
当我执行以下操作:SQL Server的数字格式
DECLARE @x float
SET @x = 1234.5
SELECT CONVERT(varbinary, @x)
什么是返回的格式?我需要以某种方式从.net返回原始数字,并且我只有二进制值可用。
澄清:
上面的语句返回
(no column name)
0x40934A0000000000
不知怎的,我得值12345.5从二进制数据0x40934A0000000000回来。
显然格式是IEEE 64位,但字节顺序是BitConverter.ToDouble
预期的相反。数量可使用此代码检索:
long bits = 0;
for (int i = 0; i < 8; i++)
bits = (bits << 8) | data[i];
return BitConverter.Int64BitsToDouble(bits);
C#到SQL Server varbinary
的相应数据类型是byte[]
。但是,如果要将其作为数字访问,为什么要将float转换为二进制文件?
我知道数据类型,但是我需要知道实际内容的格式。我这样做的原因是,我在同一个(视图)列中有一堆不同类型的值,其中一些是UDT,所以我不能使用sql_variant。 – erikkallen 2010-09-27 14:29:48
当你说你“需要得到原来的号码背”我假设你的意思是松散的。通过浮点往返可能会改变您的最后一位数字(这取决于数字有多少个小数位以及您将其格式化为多少位数)。 (当然,1234.5会出现很好,因为它在二进制浮点中是完全可表示的)。 – 2010-09-27 17:43:29
松散地会好的,但我真的假设convert(float,convert(varbinary,@x))将返回未修改的数字@x,以便可以在C#中执行操作,只要您知道格式。 – erikkallen 2010-09-28 11:41:46
@erikkallen:但是SQL语句中的十进制字符串是原始值,对吗? “convert(float,convert(varbinary,@x))”对浮点值进行往返,而不是十进制值。 – 2010-09-28 13:45:30