SQL:按位操作



诚然,我对逐位和十六进制等有点不了解。这不是我经常要处理的事情。所以我在数据库中看到的是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')

在这里摆弄

编辑-转换小端字节顺序如下:

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

最新更新