SQL:按位运算

SQL: bitwise operation

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

这里有一些你可以使用的东西 - 它会将一个整数转换成它的二进制等价物,只需先将你的字符串转换成一个 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')

Fiddle here

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

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