繁体   English   中英

MySql WHERE 子句中的与号 (&) 运算符

[英]Ampersand (&) operator in MySql WHERE Clause

这一段有什么作用? (xyz & 192 > 0)

SELECT * FROM table WHERE (xyz & 192 > 0)

192由两个值64 + 128创建

xyz可以是: 1,2,4,8,16,32,64,128 ... 或其中一些值的总和,例如64+128

这是按位与运算符:

https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-and

它对两个参数中的每一对位执行 AND 运算:

https://en.wikipedia.org/wiki/Bitwise_operation#AND

并且比 > 具有更高的优先级

https://dev.mysql.com/doc/refman/8.0/en/operator-precedence.html

INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN, MEMBER OF
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
AND, &&
XOR
OR, ||
= (assignment), :=

(xyz & 192 > 0) 检查和 xyz 是否将元素 64 和/或 128 作为其值

这不是一个答案。
Chris & Tom 的回答结合起来解释了它。
但我想知道按位与运算符如何导致不同的数字。

 with recursive NUMS (num) as ( select 1 as num union all select num+1 from NUMS where num < 575 ) select min(num) minNum, max(num) maxNum , (num & 192) as chk from NUMS group by chk, cast((num - MOD(num, 64))/64 as unsigned)
\n最小数量 | 最大数量 | 查克\n -----: |  -----: |  ——:\n      1 |  63 |  0\n     64 |  127 |  64\n    128 |  191 |  128\n    192 | 第255话 192\n   第256话第319话 0\n    320 | 第383话 64\n   第384话第447话 128\n   第448话第511话 192\n   第512话第575话 0\n

db<> 在这里摆弄

所以好吧, (xyz & 192 > 0)可以用来验证 xyz 是否在 64 到 255 之间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM