二进制类型到实际二进制

时间:2016-07-07 15:31:16

标签: sql sql-server type-conversion

所以,我知道这必须是一个愚蠢的问题,但我似乎无法找到一个好的答案。当我在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

当天的愚蠢问题,我如何将其恢复为原始的二进制格式?似乎最好将它存储为不同的类型。

1 个答案:

答案 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;