Monday, April 11, 2011

bitwise exclusive OR in Oracle

In SQL Server I have been using the ^ symbol however that doesn't seem to work in Oracle. How do I do a bitwise exclusive OR in Oracle??

Thanks

From stackoverflow
  • Here's an article about creating a BIT_OR method. (thanks Quassnoi)

    Quassnoi : No, the article describes how to make an UDF for BIT_OR, it's not a standard expression.
    Ólafur Waage : Alright... Thanks
  • There is the BITAND operator:

    select bitand(49,54)+0 from dual;
    

    You can build up the other operators from it; and here.

  • There's no easy way.

    You may cast string HEX values into RAW values and use UTL_RAW:

    SELECT UTL_RAW.bit_xor(HEXTORAW(TO_CHAR(1, 'FMX')), HEXTORAW(TO_CHAR(2, 'FMX')))
    FROM dual
    
    ---
     03
    
  • From the docs:

    function bitor(p1 number, p2 number) return number is
    begin
      return p1-bitand(p1,p2)+p2;
    end;
    
    function bitxor(p1 number, p2 number) return number is
    begin
      return bitor(p1,p2)-bitand(p1,p2);
    end;
    

    To see that these work, follow the logic with just 0s and 1s for input, and then not that there are no borrow or caries.

    -- MarkusQ

0 comments:

Post a Comment