Sql 有没有办法检查一个位是否同时设置了另一个位?

Sql 有没有办法检查一个位是否同时设置了另一个位?,sql,bit-manipulation,Sql,Bit Manipulation,抱歉,以前可能有人问过这个问题,但很难搜索。我试图弄清楚在一次操作中是否设置了一些位,而没有设置一些位。这可能吗 e、 g.我想检查第五位是否关闭,但第二位或第三位是否打开。对于您建议的SQL情况,您可以屏蔽这三位,然后对您接受的模式执行IN检查,例如 从表中选择* 其中,0x2、0x4中的字段&0x16; 或者,如果您同时接受设置的第二位和第三位,您可以只进行范围检查,因为您接受的所有三种组合都不会与未接受选项的范围重叠: 从表中选择* 其中,0x2和0x6之间的字段&0x16; 我会注意到,

抱歉,以前可能有人问过这个问题,但很难搜索。我试图弄清楚在一次操作中是否设置了一些位,而没有设置一些位。这可能吗


e、 g.我想检查第五位是否关闭,但第二位或第三位是否打开。

对于您建议的SQL情况,您可以屏蔽这三位,然后对您接受的模式执行IN检查,例如

从表中选择* 其中,0x2、0x4中的字段&0x16; 或者,如果您同时接受设置的第二位和第三位,您可以只进行范围检查,因为您接受的所有三种组合都不会与未接受选项的范围重叠:

从表中选择* 其中,0x2和0x6之间的字段&0x16; 我会注意到,虽然这是可行的,但它对于SQL或任何语言来说都不是很好的风格。实际上,您可能希望坚持使用命名的单位非空字段,这为SQL提供了更多信息,可能允许索引搜索等。书写

从表中选择* 其中,字段2=1或字段3=1,字段5=0; -或者相互排斥 其中field2+field3=1,field5=0;
没有意义的更长,而且如果您有更多有用的字段名,那么您正在做的事情就更加清楚了。

在任何特定的语言中?这不是一个真正的单一操作,但你可以在许多语言中使用这一行。这是我在编写SQL查询时经常遇到的问题,我希望我不必添加和检查第二个位掩码的位置。在SQL中,一般来说,最好不要将多个事实编码到位域中。@Damien_不信者:同意并在我的回答中作为注释补充了这一点。