當我執行以下操作: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