【问题标题】:Excluding values that don't fit the mask - Bitwise operations in mySQL排除不适合掩码的值 - mySQL 中的按位运算
【发布时间】:2020-05-01 08:33:47
【问题描述】:

我需要帮助解决问题。我有一个具有位掩码值的用户,比如说 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 数据类型是什么???
  • 位 4 设置在 b'10010001...
  • @YusufFidan 考虑改进标题。一些更明确的东西,比如“排除不适合掩码的值 - mySQL 中的按位运算”。
  • @liviriniu 好的 - 这是我的第一个问题 - 我改了标题
  • @scaisEdge 位(8)

标签: mysql bitwise-operators


【解决方案1】:

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

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

超过意味着 value_1 的值中至少存在一位,但掩码中没有(来源)。

测试一下here

【讨论】:

    【解决方案2】:

    假设您的 value_1 数据类型是字符串 尝试使用正确的投射

        select value_1 from testdb
        where cast( '10010001' as unsigned )  & cast( value_1 as unsigned ) ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      相关资源
      最近更新 更多