首页 > 解决方案 > SQL:按位运算

问题描述

诚然,我对按位和十六进制等有点无知。这不是我必须处理的事情。所以我正在查看的是0401我的数据库中的一个值。我知道我可以0x0401很容易地连接和获得,但我需要能够将其转换为二进制形式:0000 0001 0000 0100尽管我很难找到任何可以满足我需要的示例。

标签: sql-serverbitwise-operators

解决方案


这是您可能可以使用的东西-它将整数转换为等效的二进制,只需先将您的字符串转换为 int-或者如果它是十六进制,您可以使用convert. 如果您希望以 4 个等为一组,可以在适当的地方添加空格。您可以创建一个函数以使用内联:

declare @num binary(4) = 0x0401 -- little endian
select @num= Convert(int,Cast(reverse(@num) as binary(4)))

select
    iif(Convert(varchar(16), @num & 32768 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 16384 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 8192 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 4096 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 2048 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 1024 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 512 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 256 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 128 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 64 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 32 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 16 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 8 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 4 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 2 ) > 0,'1','0') +
    iif(Convert(varchar(16), @num & 1 ) > 0,'1','0')

在这里提琴

编辑 - 像这样转换小端字节顺序:

declare @little binary(4) = 0x0401
select Cast(reverse(@little) as binary(4)) bigEndian

推荐阅读