mysql - 排除不适合掩码的值 - mySQL 中的按位运算

标签 mysql bitwise-operators

我需要帮助解决问题。我有一个具有位掩码值的用户,比方说 10010001。
列名称为 value_1。在本专栏中,我有以下值可供比较:

|--|----------|  
|id|   value_1|
|--|----------|
| 1| 00000001 |
| 2| 10010001 | 
| 3| 00000010 | 
| 4| 10000001 |
| 5| 10011001 |
|--|----------|  

我的查询是这样的:

select value_1 from testdb
where b'10010001' & value_1;

我的结果是 ID 1,2,4,5
这看起来不错 - 但我如何排除 id 5,因为最低的第 4 位(从右数)不在源代码中?

最佳答案

确保 value_1 的值和掩码的组合位不会产生超出掩码的数字。

where (b'10010001' & value_1) and (cast((b'10010001' | value_1) as unsigned) <= cast(b'10010001' as unsigned))

超出意味着 value_1 的值中至少存在一位,但掩码(源)中不存在。

测试一下 here

关于mysql - 排除不适合掩码的值 - mySQL 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61539182/

相关文章:

php - 错误: No database selected when displaying data on website

php - 如何将所有行的两列相加到第三列

php - 在 Codeigniter 中从数据库获取动态内容到 Controller

mysql - MySQL中主键和多列索引的优先级?

mysql - 从查询中检索最大时间戳

javascript - 在 javascript 中设置第 31 位是否正确?

javascript - If 语句使用按位与运算符来强制评估

perl - 架构的一元 NOT/Integersize

java - 使用位运算符 JAVA 交换 int[][] 数组中每行/列的顶部和底部 2 位

c - if (y & (y = 2) 那么如何处理这个if条件