簡體   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