Jeśli potrzeba wykonać operacje logiczne na operatorach bitowych zawartych jako kolumny w tabelach bez problemu można to wykonać z poziomu języka T-SQL SQL Server.

T-SQL udostępnia operatory bitowe do wykonywania operacji logicznych na kolumnach tabeli bazy danych SQL Server. Poniżej przedstawię operatory bitowe OR, AND i XOR. Zaczniemy od utworzenia tabeli z kolumną klucza podstawowego, wraz z dwiema kolumnami typu danych BIT. Następnie wypełnimy tabelę czterema wierszami, tak jakbyśmy tworzyli klasyczną tabelę prawdy.

Poniżej tabela z podstawowymi operacjami logicznymi:

Najpierw utworzymy tabelę z danymi na podstawie kodu przedstawionego poniżej:

drop table if exists #Bitwise
create table #Bitwise
( 	ID integer identity(1,1) not null primary key,
	ArgA bit,
	ArgB bit
)

insert into #Bitwise(ArgA,ArgB) values 
 (0,0)
,(0,1)
,(1,0)
,(1,1)

select * from #Bitwise order by ID

Znak pipe(|) jest operatorem bitowym OR w T-SQL

Poniższe zapytanie tworzy tabelę prawdy dla operacji OR między kolumnami ArgA i ArgB. LogicalOR będzie równy 1, jeśli którykolwiek z atrybutów ArgA lub ArgB jest równy 1.

select *, ArgA|ArgB as LogicalOR
from #Bitwise
order by ID

Znak Ampersand (&) jest operatorem bitowym AND w T-SQL

Poniższe zapytanie tworzy tabelę prawdy dla operacji AND między kolumnami ArgA i ArgB. LogicalAND będzie równe 1, jeśli ArgA jak i ArgB jest równy 1.

select *, ArgA&ArgB as LogicalAND
from #Bitwise
order by ID

Znak daszka (^) jest bitowym operatorem XOR (wyłącznym OR) w T-SQL

Poniższy kod T-SQL tworzy tabelę prawdy dla operacji XOR między kolumnami ArgA i ArgB. LogicalXOR będzie równy 1, jeśli ArgA jest równy ArgB.

select *, ArgA^ArgB as LogicalXOR
from #Bitwise
order by ID

Znak tyldy (~) jest operatorem bitowym NOT w T-SQL

Poniższy przykład przedstawia operację negacji ArgA. LogicalNOT będzie równy 1 jeśli ArgA będzie równy 0.

select ID, ArgA, ~ArgA as LogicalNOT
from #Bitwise
order by ID

Poniższy przykład przedstawia operację OR wraz z negacją operacji OR.

select *, ArgA|ArgB as LogicalOR,
        ~(ArgA|ArgB) as LogicalNOT_OR
from #Bitwise
order by ID

Poniższy przykład przedstawia operację AND wraz z negacją operacji AND.

select *, ArgA&ArgB as LogicalAND,
        ~(ArgA&ArgB) as LogicalNOT_AND
from #Bitwise
order by ID

Poniższy przykład przedstawia operację XOR wraz z negacją operacji XOR.

select *, ArgA^ArgB as LogicalXOR,
        ~(ArgA^ArgB) as LogicalNOT_XOR
from #Bitwise
order by ID

Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl