从select查询返回二进制值

时间:2016-01-06 09:06:40

标签: sql sql-server binary binary-search

我创建了以下简单查询:

substring(SELECT DB_NAME(), 1, 1)

我希望以二进制字符串(如11001011)接收结果。

意思是,将选定的“char”作为二进制文件。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

如果要转换字符串,可以尝试下一个SQL查询

SELECT CAST(DB_NAME() AS VARBINARY(MAX)) as db_binary_name

我编写了小型T-SQL函数将varchar值转换为字符串二进制值。希望,这将是有用的。

CREATE FUNCTION StrToBin
(
    @str VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
    DECLARE @binary_value VARBINARY(MAX),
            @output_str NVARCHAR(MAX),
            @temp_str NVARCHAR(MAX),
            @part_binary_value VARBINARY(1),
            @start_pos BIGINT

    SET @binary_value = CAST(@str AS VARBINARY(MAX))
    SET @start_pos = 1

    WHILE @start_pos <= LEN(@binary_value)
    BEGIN
        SET @temp_str = NULL
        SET @part_binary_value = NULL

        SET @part_binary_value = SUBSTRING(@binary_value, @start_pos, 1)

        WHILE @part_binary_value NOT IN(0,1)
        BEGIN 
            SET @temp_str = ISNULL(@temp_str, '') + CAST(@part_binary_value % 2 AS VARCHAR(1))
            SET @part_binary_value = @part_binary_value / 2

            IF @part_binary_value = 1
                SET @temp_str = @temp_str + '1' 
        END

        IF @temp_str IS NULL
            SET @temp_str = '0'
        ELSE
            SET @temp_str = REVERSE(@temp_str)

        -- padding 
        IF LEN(@temp_str) < 8
            SET @temp_str = REPLICATE('0', 8 - LEN(@temp_str)) + @temp_str

        SET @output_str = ISNULL(@output_str, '') + @temp_str
        SET @start_pos = @start_pos + 1
    END

    RETURN @output_str
END
GO

例如

SELECT dbo.StrToBin(DB_Name()) as col_name

答案 1 :(得分:0)

您可以使用强制转换或转换

SELECT CAST(DB_NAME() AS VARBINARY)
SELECT CONVERT(VARBINARY,DB_NAME())