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:

01drop table if exists #Bitwise
02create table #Bitwise
03(   ID integer identity(1,1) not null primary key,
04    ArgA bit,
05    ArgB bit
06)
07 
08insert into #Bitwise(ArgA,ArgB) values
09 (0,0)
10,(0,1)
11,(1,0)
12,(1,1)
13 
14select * 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.

1select *, ArgA|ArgB as LogicalOR
2from #Bitwise
3order 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.

1select *, ArgA&ArgB as LogicalAND
2from #Bitwise
3order 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.

1select *, ArgA^ArgB as LogicalXOR
2from #Bitwise
3order 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.

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

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

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

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

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

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

1select *, ArgA^ArgB as LogicalXOR,
2        ~(ArgA^ArgB) as LogicalNOT_XOR
3from #Bitwise
4order 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