sql - 如何将 base-2 字符串(例如 '001011' )转换为二进制数据类型?

标签 sql sql-server binary

我有一个小二进制数作为字符串 001011,我希望将其转换为 binaryvarbinary(即 0xB )。我将如何在 MS SQL Server 中执行此操作?

最佳答案

CREATE FUNCTION dbo.fnConvertToBinary
    (@str VARCHAR(32), @base TINYINT)
RETURNS VARBINARY(32)
AS
BEGIN
DECLARE @bytes INT = 0
DECLARE @i INT = 0
DECLARE @l INT = LEN(@str)

IF (@base = 2)
BEGIN
    WHILE @i <= @l
    BEGIN   
        SET @bytes = @bytes * 2 + CAST(SUBSTRING(@str, @i, 1) AS TINYINT)
        SET @i = @i + 1
    END
END

IF (@base = 8)
BEGIN
    WHILE @i <= @l
    BEGIN   
        SET @bytes = (CAST(SUBSTRING(@str, @i, 1) AS TINYINT) 
                            * POWER(8, @l-@i)) 
                            + @bytes
        SET @i = @i + 1
    END
END

IF (@base = 10)
    SET @bytes = CAST(@str AS INT)

IF (@base = 16)
BEGIN
    SET @i = @l
    WHILE @i > 0
    BEGIN       
        DECLARE @bit INT = (CASE SUBSTRING(@str, @i, 1)
                            WHEN '0' THEN 0 WHEN '1' THEN 1
                            WHEN '2' THEN 2 WHEN '3' THEN 3
                            WHEN '4' THEN 4 WHEN '5' THEN 5
                            WHEN '6' THEN 6 WHEN '7' THEN 7
                            WHEN '8' THEN 8 WHEN '9' THEN 9
                            WHEN 'A' THEN 10 WHEN 'B' THEN 11
                            WHEN 'C' THEN 12 WHEN 'D' THEN 13
                            WHEN 'E' THEN 14 WHEN 'F' THEN 15 END) 

        SET @bytes = @bit * POWER(16, @l-@i) + @bytes

        SET @i = @i - 1
    END
END

RETURN CAST(@bytes AS VARBINARY(32))
END
GO

关于sql - 如何将 base-2 字符串(例如 '001011' )转换为二进制数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557490/

相关文章:

mysql - 行之间的sql分割数

python - Django查询优化: find a list of objects based on a many-to-one to a many-to-many

sql - 具有多个值列的数据透视表/交叉表

SQL 沿列移动数据

sql - 根据两列的分组插入表格数据

sql - 我想以分层形式生成 XML 文件

sql - 按列名获取索引

用于从字符串解码二进制编码的十进制 (BCD) 的 Java 代码或库

c - 如何检查文件是 C 中的文本 (ASCII) 还是二进制文件

javascript - 如何通过 Websocket 以二进制形式发送 arraybuffer?