I have legacy sql query that selects bit masks (among other data), something like:
x
1
2
1
How do I group this output like:
1 or 2 or 1
That should be 3
Advertisement
Answer
In order to do bit-wise logic you have to do a “bit” of math. (Bad puns are free around here :-).
Oracle defines the BITAND function. To get a bitwise ‘or’ you can define your own function as:
FUNCTION BITOR(n1 IN NUMBER, n2 IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN n1 - BITAND(n1, n2) + n2;
END BITOR;
And for completeness, BITXOR is
FUNCTION BITXOR(n1 IN NUMBER, n2 IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN BITOR(n1, n2) - BITAND(n1, n2);
END BITXOR;
Best of luck.