В двоичен код "set" означава "има стойност 1". „Не е зададено“ означава „има стойност 0“.
От документите на Oracle за BITAND:
"Резултатът се изчислява на няколко стъпки. Първо, всеки аргумент A се заменя със стойността SIGN(A)*FLOOR(ABS(A)). Това преобразуване има ефект на съкращаване на всеки аргумент към нула. След това всеки аргумент A (който трябва сега е цяло число) се преобразува в n-битова двоична целочислена стойност, допълваща две. Двете битови стойности се комбинират с помощта на побитова операция И. Накрая, получената n-битова допълнителна стойност на две се преобразува обратно в ЧИСЛО."
Казано по-просто, тази функция съкращава своите аргументи, преобразува ги в двоично число (в момента ограничено до 128 бита), И събира двете двоични числа заедно и връща резултата от преобразуването на двоичното число обратно в ЧИСЛО.
Ето резултата от всички възможни комбинации от нула и едно:
SELECT BITAND(0, 0) AS "0, 0", -- i.e. 0 AND 0 = 0
BITAND(0, 1) AS "0, 1", -- i.e. 0 AND 1 = 0
BITAND(1, 0) AS "1, 0", -- i.e. 1 AND 0 = 0
BITAND(1, 1) AS "1, 1" -- i.e. 1 AND 1 = 1
FROM DUAL;
По-сложен пример би бил ANDing заедно 11 и 5. В двоичен код 11 десетичен знак става "1011". 5 десетична става двоична "0101". Ако И тези стойности заедно, както в
1 0 1 1
0 1 0 1
-------
0 0 0 1
получавате 1 двоичен код, който все още е 1, когато се преобразува обратно в десетичен.
Споделяйте и се наслаждавайте.