Thread: operators and bit field
I haven't seen what operators can be applied to bit masks. In particular, I am looking to use binary AND: I want to AND two bitmasks together and see: A/ if the result has ANY bits set B/ what bits are set in the results. SELECT other_fields FROM some_table WHERE ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO ; I may try to use a single char for one of the bit masks I need, is it possible to store all 256 values into a varchar(1) using escaped input? Is it possible to AND two varchars within a select and compare the result? SELECT other_fields FROM some_table WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string';
On Fri, Feb 14, 2003 at 11:12:15 -0800, Dennis Gearon <gearond@cvc.net> wrote: > I haven't seen what operators can be applied to bit masks. It looks like & works: area=> select 3&6; ?column? ---------- 2 (1 row) > > In particular, I am looking to use binary AND: > > I want to AND two bitmasks together and see: > > A/ if the result has ANY bits set > B/ what bits are set in the results. > > SELECT other_fields > FROM some_table > WHERE > ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE > OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO > ; > > I may try to use a single char for one of the bit masks I need, > is it possible to store all 256 values into a varchar(1) using > escaped input? > > Is it possible to AND two varchars within a select and compare the result? > > SELECT other_fields > FROM some_table > WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string'; > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org
Bruno, could you check that with explicity bitfield(n) values, please? 2/14/2003 1:37:03 PM, Bruno Wolff III <bruno@wolff.to> wrote: >On Fri, Feb 14, 2003 at 11:12:15 -0800, > Dennis Gearon <gearond@cvc.net> wrote: >> I haven't seen what operators can be applied to bit masks. > >It looks like & works: >area=> select 3&6; > ?column? >---------- > 2 >(1 row) > >> >> In particular, I am looking to use binary AND: >> >> I want to AND two bitmasks together and see: >> >> A/ if the result has ANY bits set >> B/ what bits are set in the results. >> >> SELECT other_fields >> FROM some_table >> WHERE >> ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE >> OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO >> ; >> >> I may try to use a single char for one of the bit masks I need, >> is it possible to store all 256 values into a varchar(1) using >> escaped input? >> >> Is it possible to AND two varchars within a select and compare the result? >> >> SELECT other_fields >> FROM some_table >> WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string'; >> >> >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 6: Have you searched our list archives? >> >> http://archives.postgresql.org >
Also, for fun, could you try '3' & '6' ? 2/14/2003 1:37:03 PM, Bruno Wolff III <bruno@wolff.to> wrote: >On Fri, Feb 14, 2003 at 11:12:15 -0800, > Dennis Gearon <gearond@cvc.net> wrote: >> I haven't seen what operators can be applied to bit masks. > >It looks like & works: >area=> select 3&6; > ?column? >---------- > 2 >(1 row) > >> >> In particular, I am looking to use binary AND: >> >> I want to AND two bitmasks together and see: >> >> A/ if the result has ANY bits set >> B/ what bits are set in the results. >> >> SELECT other_fields >> FROM some_table >> WHERE >> ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE >> OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO >> ; >> >> I may try to use a single char for one of the bit masks I need, >> is it possible to store all 256 values into a varchar(1) using >> escaped input? >> >> Is it possible to AND two varchars within a select and compare the result? >> >> SELECT other_fields >> FROM some_table >> WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string'; >> >> >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 6: Have you searched our list archives? >> >> http://archives.postgresql.org >
Dennis Gearon <gearond@cvc.net> writes: > I haven't seen what operators can be applied to bit masks. > In particular, I am looking to use binary AND: > I want to AND two bitmasks together and see: > A/ if the result has ANY bits set > B/ what bits are set in the results. Why don't you use bit strings, like the SQL spec authors intended? regression=# select b'10001' & b'01111'; ?column? ---------- 00001 (1 row) See types BIT(n) and BIT VARYING(n). regards, tom lane
Sorry, 'bit masks' === 'bit strings' BTW, how are 'bit strings' stored and manipulated? 2/14/2003 2:29:48 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >Dennis Gearon <gearond@cvc.net> writes: >> I haven't seen what operators can be applied to bit masks. >> In particular, I am looking to use binary AND: >> I want to AND two bitmasks together and see: >> A/ if the result has ANY bits set >> B/ what bits are set in the results. > >Why don't you use bit strings, like the SQL spec authors intended? > >regression=# select b'10001' & b'01111'; > ?column? >---------- > 00001 >(1 row) > >See types BIT(n) and BIT VARYING(n). > > regards, tom lane >