BIT_AND(), BIT_OR(), BIT_XOR() în MySQL

Combină pe biți toate valorile unui grup: ȘI, SAU, respectiv SAU exclusiv.

Sintaxă
BIT_AND(expresie)
BIT_OR(expresie)
BIT_XOR(expresie)

Ce face BIT_AND(), BIT_OR(), BIT_XOR()

Aceste funcții de agregare aplică operatorii pe biți peste toate valorile din grup. Sunt utile când drepturile sau opțiunile sunt stocate ca biți: BIT_OR() dă toate drepturile pe care le are măcar un rol, BIT_AND() doar pe cele comune tuturor.

Parametri

Parametru Descriere
expresie Valori întregi (sau șiruri binare).

Ce returnează

Un număr întreg.

Exemple

Exemplul 1: Drepturi combinate din mai multe roluri

CREATE TABLE roluri (utilizator VARCHAR(10), drepturi INT);
-- 1 = citire, 2 = scriere, 4 = ștergere
INSERT INTO roluri VALUES ('ana', 1), ('ana', 3), ('dan', 5), ('dan', 7);

SELECT utilizator,
       BIT_OR(drepturi) AS orice_rol,
       BIT_AND(drepturi) AS toate_rolurile,
       BIT_XOR(drepturi) AS sau_exclusiv
FROM roluri
GROUP BY utilizator
ORDER BY utilizator;

Rezultat

+------------+-----------+----------------+--------------+
| utilizator | orice_rol | toate_rolurile | sau_exclusiv |
+------------+-----------+----------------+--------------+
| ana        |         3 |              1 |            2 |
| dan        |         7 |              5 |            2 |
+------------+-----------+----------------+--------------+

Greșeli frecvente

  • Folosești SUM() în loc de BIT_OR() pentru a combina drepturi. Dacă doi utilizatori au același bit, suma îl numără de două ori și strică rezultatul.

Comenzi înrudite

  • Operatori pe biți: Lucrează cu biții numerelor: ȘI (&), SAU (|), SAU exclusiv (^), inversare (~), deplasări (<<, >>).
  • BIN() și OCT(): Returnează reprezentarea unui număr în baza 2 (BIN) sau în baza 8 (OCT), ca text.
  • GROUP BY: Grupează rândurile cu aceeași valoare, ca să calculezi totaluri pentru fiecare grup.