在SQL中分解位掩码

史蒂夫·丹纳

我有一个使用位掩码的旧数据库设计。我有一个表,该表可容纳电子邮件地址和一个基于另一个表的位掩码,并且受命编写“分解”这些位掩码的SQL查询。通常,以不同的方式查看此数据,其中我们使用按位&来确定位掩码是否有效,但这次不是这种情况...

在我的数据的简化版本中,我有2个类似的字段。

|---------------------|------------------|
|      Email          |     bitMask      |
|---------------------|------------------|
|     [email protected]   |        3         |
|---------------------|------------------|
|    [email protected]   |        9         |
|---------------------|------------------| 

我最终要寻找的输出将显示到达位掩码所需的“ 2的幂”或“位”,因此我可以交叉引用另一个表中的掩码值。所以我的示例输出是这样的:

|---------------------|------------------|
|      Email          |     value        |
|---------------------|------------------|
|     [email protected]   |        2         |
|---------------------|------------------|
|     [email protected]   |        1         |
|---------------------|------------------|
|    [email protected]   |        8         |
|---------------------|------------------| 
|    [email protected]   |        1         |
|---------------------|------------------| 

这是我用来处理位掩码的相反方法。如果有人知道如何编写此查询,请多多指教。

去世

使用&(按位AND运算符),with0xFFFFFFFE获得2幂,并且with1获得第一个二进制数(01):

select [Email], [bitMask] & 0xFFFFFFFE [value]
from tablename  
union all
select [Email], [bitMask] & 1
from tablename  
order by [Email], [value] desc

参见演示
结果:

> Email          | value
> :------------- | ----:
> [email protected]  |     2
> [email protected]  |     1
> [email protected] |     8
> [email protected] |     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章