所以,我知道这必须是一个愚蠢的问题,但我似乎无法找到一个好的答案。当我在SQL Server中的二进制列中存储二进制值时,它以十六进制格式显示。因此,下面,二进制数字在右边,而表格中以“二进制”格式存储的十六进制表示位于左侧。
Hex Binary
0x0000 0
0x0001 1
0x000A 10
0x000B 11
0x0064 100
0x0065 101
0x006E 110
0x006F 111
0x03E8 1000
0x03E9 1001
0x03F2 1010
0x03F3 1011
0x044C 1100
当天的愚蠢问题,我如何将其恢复为原始的二进制格式?似乎最好将它存储为不同的类型。
答案 0 :(得分:1)
它实际上以十六进制格式存储
这是错的。 MSSQL将二进制数据存储为二进制。十六进制格式是二进制值的表示。 要转换为任何基于N的表示(也是二进制),您可以编写SP或从this page获取它:
CREATE FUNCTION ConvertToBase
(
@value AS BIGINT,
@base AS INT
) RETURNS VARCHAR(MAX) AS BEGIN
-- some variables
DECLARE @characters CHAR(36),
@result VARCHAR(MAX);
-- the encoding string and the default result
SELECT @characters = '0123456789abcdefghijklmnopqrstuvwxyz',
@result = '';
-- make sure it's something we can encode. you can't have
-- base 1, but if we extended the length of our @character
-- string, we could have greater than base 36
IF @value < 0 OR @base < 2 OR @base > 36 RETURN NULL;
-- until the value is completely converted, get the modulus
-- of the value and prepend it to the result string. then
-- devide the value by the base and truncate the remainder
WHILE @value > 0
SELECT @result = SUBSTRING(@characters, @value % @base + 1, 1) + @result,
@value = @value / @base;
-- return our results
RETURN @result;